《C语言程序设计进阶》7.2.3位段

  • 把一个int的若干位组合成一个结构

    1
    2
    3
    4
    5
    6
    struct {
    unsigned int leading : 3; // leading占用3位
    unsigned int FLAG1: 1;
    unsigned int FLAG2: 1;
    int trailing: 11;
    };
  • 可以直接用位段的成员名称来访问

    • 比移位、与、或还方便
  • 编译器会安排其中的位的排列,不具有可移植性

  • 当所需的位超过一个int时会采用多个int

测试一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>

void prtBin(unsigned int number);

struct U0{
unsigned int leading : 3; // leading占用最低三位
unsigned int FLAG1 : 1;
unsigned int FLAG2 : 1;
int trailing : 28; // 3 + 1 + 1 + 28 = 33,两个int
};

int main()
{
struct U0 uu;
uu.leading = 2;
uu.FLAG1 = 0;
uu.FLAG2 = 1;
uu.trailing = 0;
printf("sizeof(uu) = %lu\n", sizeof(uu));
prtBin(*(int*)&uu);

return 0;
}

void prtBin(unsigned int number)
{
unsigned mask = 1u << 31;
for( ; mask; mask >>= 1){
printf("%d", number & mask ? 1 : 0);
}
printf("\n");
}
打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2020-2021 zhangguoliu
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信