位段式结构体例题

cpp 复制代码
int main()
{
    unsigned char puc[4];
    struct man
    {
        unsigned char zhang;
        unsigned char san : 1;
        unsigned char shuai : 2;
        unsigned char bi : 3;
    }*dashuaibi;
    dashuaibi = (struct zs*)puc;
    memset(puc, 0, 4);
    dashuaibi->zhang = 2;
    dashuaibi->san = 3;
    dashuaibi->shuai = 4;
    dashuaibi->bi = 5;
    printf("%02x %02x %02x %02x\n", puc[0], puc[1], puc[2], puc[3]);
    return 0;
}

代码中的结构体man中所有创建的变量都是一个无符号char类型。其中zhang占1个字节(byte),san占1个字节也就是8位(bit)中的1位(bit)还剩下7bit,接下来shuai又占了2bit还剩5bit,最后bi占走剩下的3bit。所以结构体man总共开辟了2个字节。

把puc这个数组的首元素地址赋给结构体变量dashuaibi。memset是用来初始化数组的值全为0。

接下来给man结构体里面的值进行赋值。

2, 3, 4, 5它们的二进制分别是:

将它们存放入数组中如下:

注:VS编译器是小端存储的上述地址存放是小端存储

%02x的意思是以16进制形式表示出2位,不够2位补0。

所以打印出来的应该就是 02 29 00 00

相关推荐
Escalating_xu11 分钟前
【Linux 网络编程】NAT、代理服务与内网穿透:从一个公网 IP,到一条真正可达的连接
linux·网络·tcp/ip
来让爷抱一个32 分钟前
Linux 磁盘 100% 但 du 查不出东西,五种情况逐个排
linux·网络·chrome
你怎么知道我是队长34 分钟前
C++零基础第3周:if/else、switch、for/while/do-while 控制流完全指南(附20段可运行代码+避坑清单)
java·开发语言·c++
冻柠檬飞冰走茶1 小时前
PTA刷题集之Airline Routes(C语言实现)
c语言·开发语言·数据结构·算法
宗旨飞翔1 小时前
不同的二叉搜索树
算法
736c1 小时前
固件开发岗算法
数据结构·算法
青少儿编程课堂1 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:倍增法求最近公共祖先LCA解析
c++·python·算法·bfs·信息学竞赛
冻柠檬飞冰走茶1 小时前
PTA刷题集之Battle Over Cities - Hard Version(C语言实现)
c语言·开发语言·数据结构·算法
吴长建先生重名了1 小时前
电商订单系统在Docker和Kubernetes中部署的高
算法
雷✘2 小时前
C++ 类与对象的初始化机制、成员访问边界与拷贝优化
java·网络·c++