Linux C语言 29-位域
本节关键字:C语言 位域 位运算
相关C库函数:
什么是位域?
C 语言的位域(bit-field)是一种特殊的结构体成员,允许我们按位对成员进行定义,指定其占用的位数。
位域的作用
在实际项目中,使用位域最大的优点就是节约内存空间。其次,使用位域后可以减少位运算(位移、与、或)。
位域的使用
#include <stdio.h>// 假如我们定义了一个开关集合,每个开关只能出现0和1两个值
typedef struct
{char s_0;char s_1;char s_2;char s_3;char s_4;char s_5;char s_6;char s_7;
} byte1_t;typedef struct
{char s_0:1;char s_1:1;char s_2:1;char s_3:1;char s_4:1;char s_5:1;char s_6:1;char s_7:1;
} byte2_t;int main(void)
{char value = 1;byte1_t b1;byte2_t b2;char *p = NULL;int i;printf("========= byte1_t: \n");p = (char*)&b1;for (i=0; i<8; i++){if (i % 2 == 0)*(p+i) = 1;else*(p+i) = 0;}for (i=0; i<8; i++)printf("s_%d=%d\n", i+1, *(p+i));printf("\n\n\n========= byte2_t: \n");p = (char*)&b2;for (i=0; i<8; i++){if (i % 2 == 0)*p |= (1<<i);else*p &=~ (1<<i);}for (i=0; i<8; i++)printf("s_%d=%d\n", i, *p>>i & 1);printf("\n\n");printf("=========byte1_t size: %d\n", sizeof(byte1_t));printf("=========byte2_t size: %d\n", sizeof(byte2_t));return 0;
}/** 运行结果:
========= byte1_t:
s_1=1
s_2=0
s_3=1
s_4=0
s_5=1
s_6=0
s_7=1
s_8=0
========= byte2_t:
s_0=1
s_1=0
s_2=1
s_3=0
s_4=1
s_5=0
s_6=1
s_7=0
=========byte1_t size: 8
=========byte2_t size: 1
*/