//直接上code吧
位域的作用就是像操作变量一样来操作bit位,常用于嵌入式编程中,来达到较少存储空间使用的目的。
#include <stdio.h>
#include <string.h>
int main(void)
{
struct bs
{
unsigned char a: 1;
unsigned char b: 3;
unsigned char c: 4;
unsigned char d: 1;
unsigned char e: 2;
unsigned char f: 2;
}bit, *pbit;
printf("sizeof = %d %d\n", sizeof(bit), sizeof(*pbit));
bit.a = 1;
bit.b = 7;
bit.c = 15;
printf("%d,%d,%d\n", bit.a, bit.b, bit.c);
pbit = &bit;
pbit->a = 0;
pbit->b &= 3;
pbit->c |= 1;
printf("%d,%d,%d\n", pbit->a, pbit->b, pbit->c);
memset(pbit, 0, sizeof(bit));
pbit->a = 1;
pbit->b = 0x02;
pbit->c = 0x06;
pbit->d = 1;
pbit->e = 1;
pbit->f = 2;
printf("0x%04x\n", *(unsigned short int *)pbit);
return 0;
}<span style="color:#ff0000;">
</span>
输出结果:
a: 1
b: 010
c: 0110
d: 1
e: 01
f: 10
存储位置大致为 fedcba,
排在前面的变量放在低位,不晓得是否跟cpu的大小端是否有关系。
内存中存放的值变成 1 0011 0110 0101
也就是0x1365
看到这项技术时,想当然的可以用在h264头写入的,里面有好多位操作,看来不行啊。