来源:李逍遥-技术让梦想更伟大
位域是什么?
有些数据在存储时并不需要占用一个完整的字节,只需要占用一个或几个二进制位即可。例如开关只有通电和断电两种状态,用 0 和 1 表示足以,也就是用一个二进位。正是基于这种考虑,C语言又提供了一种叫做位域的数据结构。 在结构体定义时,我们可以指定某个成员变量所占用的二进制位数(Bit),这就是位域。请看下面的例子:
1struct bs{ 2 unsigned m; 3 unsigned n: 4; 4 unsigned char ch: 6; 5};
:后面的数字用来限定成员变量占用的位数。成员 m 没有限制,根据数据类型即可推算出它占用 4 个字节(Byte)的内存。成员 n、ch 被:后面的数字限制,不能再根据数据类型计算长度,它们分别占用 4、6 位(Bit)的内存。 n、ch 的取值范围非常有限,数据稍微大些就会发生溢出,请看下面的例子:
1#include 2int main(){ 3 struct bs{ 4 unsigned m; 5 unsigned n: 4; 6 unsigned char ch: 6; 7 } a = { 0xad, 0xE, '$'}; 8 //第一次输出 9 printf("%#x, %#x, %c\n", a.m, a.n, a.ch); 10 //更改值后再次输出 11 a.m = 0xb8901c; 12 a.n = 0x2d; 13 a.ch = 'z'; 14 printf("%#x, %#x, %c\n", a.m, a.n, a.ch); 15 system("pause"); 16 return 0; 17}
运行结果:
免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!