c/c++位字段

 

位字段

 

 

定义

位字段是C语言中一种存储结构,不同于一般结构体的是它在定义成员的时候需要指定成员所占的位数。

所有基础的数据类型, 最大的也不过 10 个字节;

我们可以自定义的数据类型 -- struct, 通过把若干类型组合在一起, 让一种类型可以大很多.

我们知道, 一个字节有八个 Bit 组成; struct中的 "位字段" 是以 Bit 为单位的, 这已经是计算机的最小单位, 大小是 char 类型的 1/8.

 

用途

它主要用于一些使用空间很宝贵的程序设计中,如嵌入式程序设计。

 

要点

1.C语言允许unsigned int类型,signed int类型或int类型的位字段,分别称为无符号位段,带符号位字段和普通位字段。和普通字符一样,普通位字段可以无符号或带符号。C99允许_Bool类型的位字段。 

考虑下面标准C语言声明在采用对二的补码为编码方式的计算机中的效果:

 

 

struct S
{
    unsigned a:3;
    signed b:3;
    int c:3;
}t = {-1, -1, -1};

 

 此时t.a,t.b,t.c的值分别为7,-1,-1。

 

 

2. 位字段的存储方式:即是用"高位优先",还是"低位优先"。采用位字段的程序,由于存储方式不同,程序是不可移植的。

 

3.无名位字段

结构中,还可以包括一个无名位字段,提供相邻成员之间的填充,强制结构体按word对齐。

 

4.包含位字段的结构和其他结构没有区别, 譬如同时包含其他类型的字段:

 

 

 

#include <stdio.h>

struct Bit
{
	unsigned b1: 1;
	unsigned b2: 1;
	float f;
}B;

int main(void)
{
  B.b1 = 0;
  B.b2 = 1;
  B.f = 3.14;

  printf("%d, %d, %g\n", B.b1, B.b2, B.f);

  return 0;
}

 

 

示例1

 

 

#include <stdio.h>

struct Bit
{
	unsigned a: 1; /* 1 Bit, 取值范围: 0 - 1 */
	unsigned b: 2; /* 2 Bit, 取值范围: 0 - 3 */
	unsigned c: 3; /* 3 Bit, 取值范围: 0 - 7 */
	unsigned d: 4; /* 4 Bit, 取值范围: 0 - 15 */
}B;

int main(void)
{
  B.a = 1;
  B.b = 3;
  B.c = 7;
  B.d = 15;

  printf("%d, %d, %d, %d\n", B.a, B.b, B.c, B.d);

  return 0;
}

 

 

示例2

 

 

#include <stdio.h>

struct Bit
{
	int b8: 1;
	int b7: 1;
	int b6: 1;
	int b5: 1;
	int b4: 1;
	int b3: 1;
	int b2: 1;
	int b1: 1;
}B;

int main(void)
{
  unsigned char *p = NULL;

  B.b1 = 1; B.b2 = 1; B.b3 = 1; B.b4 = 1; B.b5 = 1; B.b6 = 1; B.b7 = 1; B.b8 = 1;
  p = (unsigned char *)&B;
  printf("%d\n", *p); /* 255 */

  B.b1 = 0; B.b2 = 0; B.b3 = 0; B.b4 = 0; B.b5 = 0; B.b6 = 0; B.b7 = 0; B.b8 = 1;
  p = (unsigned char *)&B;
  printf("%d\n", *p); /* 1  */

  B.b1 = 0; B.b2 = 0; B.b3 = 0; B.b4 = 0; B.b5 = 1; B.b6 = 1; B.b7 = 1; B.b8 = 1;
  p = (unsigned char *)&B;
  printf("%d\n", *p); /* 15 */

  B.b1 = 0; B.b2 = 1; B.b3 = 1; B.b4 = 1; B.b5 = 1; B.b6 = 1; B.b7 = 1; B.b8 = 1;
  p = (unsigned char *)&B;
  printf("%d\n", *p); /* 127 */

  return 0;
}
 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在虚拟机中配置VSCode的C/C++环境可以让你在虚拟机中进行C/C++的开发工作。以下是配置步骤: 1. 安装VSCode:首先,在虚拟机中下载并安装Visual Studio Code。你可以从VSCode官方网站上下载适用于你的操作系统的安装包。 2. 安装C/C++扩展:打开VSCode,点击左侧的扩展图标(或按下Ctrl+Shift+X),在搜索框中输入"C/C++",找到并安装Microsoft的C/C++扩展。 3. 安装编译器:在虚拟机中,你需要安装一个C/C++编译器。常用的编译器有GCC和Clang。你可以使用包管理器(如apt-get、yum等)来安装编译器。 4. 配置编译器路径:打开VSCode,点击左下角的设置图标(或按下Ctrl+,),在搜索框中输入"C/C++",找到"C/C++: Edit Configurations (UI)"选项,点击进入编辑配置界面。在"Compiler path"字段中填入你安装的编译器的路径。 5. 创建C/C++项目:在VSCode中,点击左侧的资源管理器图标(或按下Ctrl+Shift+E),右键点击一个文件夹,选择"New Folder"来创建一个新的文件夹作为你的项目目录。然后,点击左侧的源代码管理图标(或按下Ctrl+Shift+G),选择"Initialize Repository"来初始化一个Git仓库。 6. 编写C/C++代码:在项目目录中创建一个新的C/C++源文件(如hello.c),在文件中编写你的C/C++代码。 7. 编译和运行代码:在VSCode中,点击左侧的调试图标(或按下Ctrl+Shift+D),点击顶部的绿色箭头按钮来编译和运行你的代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值