C 位域

今天说说C中的位域,在很多地方还是很有作用的,本来能画100解决的问题你用50解决何尝不是一种好方法。

废话不多说,先上代码:

struct
{
unsigned int widthValidated;
unsigned int heightValidated;
} status;

这个结构需要8个字节的空间,但是如果我们只是保存true/false,定义一个这样的变量是不是有点浪费。所以C提供了一种更好的内存管理方式,就是我们要说的。怎么做,看下面:

struct
{
unsigned int widthValidated : 1;
unsigned int heightValidated : 1;
} status;

可以测测需要多少个字节?

没错,第一个结构占用8个字节的空间,第二个占4个字节的空间。
这种结构:后面的数字即限制位数,所以后面的数字需要小于等于该变量的类型位宽度。

具体列出:

在结构内声明位域的形式如下:
struct
{
type [member_name] : width ;
};
下面是有关位域中变量元素的描述:
type :整数类型,决定了如何解释位域的值。类型可以是整型、有符号 整型、无符号整型。
member_name:位域的名称。
width:位域中位的数量。宽度必须小于或等于指定类型的位宽度。

举个例子:
幼儿园统计学生年龄,如果用到此结构,我们该如何做?
假如年龄不能超过7。
那么我们给出结构:
struct
{
unsigned int age : 3;
} Age;

ok,限制3位,即2^3 = 8(0~7)

int main( )
{
Age.age = 4;
printf( “Sizeof( Age ) : %d\n”, sizeof(Age) );
printf( “Age.age : %d\n”, Age.age );

扫描二维码关注公众号,回复: 126822 查看本文章

Age.age = 7;
printf( “Age.age : %d\n”, Age.age );

Age.age = 8;
printf( “Age.age : %d\n”, Age.age );

return 0;
}

结果如何:
没错:4 , 7 , 0

上面的结构定义指示 C 编译器,age 变量将只使用 3 位来存储这个值,如果您试图使用超过 3 位,则无法完成。
如果编译发现会有警告,而结果还是会出来,这个就告诉我们警告还是要消除的。

猜你喜欢

转载自blog.csdn.net/allen807733144/article/details/73897341
今日推荐