位段式结构体例题

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

相关推荐
mahuifa几秒前
C++(Qt)软件调试---binutils工具集详解(39)
linux·c++·软件调试·binutils
Qt程序员2 分钟前
Qt C++ 教程:无边框窗体 + 自定义标题栏 + 圆角 + 拖拽拉升 + 阴影
c++·qt·qt编程·qt开发·qt教程·qt界面开发·qt界面
泽虞6 分钟前
《Qt应用开发》笔记p5
linux·开发语言·c++·笔记·qt·算法
qq_433554549 分钟前
C++ 完全背包时间优化、完全背包空间优化
开发语言·c++·动态规划
海棠蚀omo16 分钟前
Linux操作系统-进程(三)
linux·操作系统
半梦半醒*1 小时前
Prometheus监控物理服务器
linux·运维·服务器·centos·prometheus
mzhan0171 小时前
Linux: network: 拔插网线 interface down/up测试的痛点
linux·服务器·测试·破坏性测试
黑马金牌编程2 小时前
如何判断一台服务器是否负载过高?
linux·运维·性能调优·性能分析·故障排查
小锋学长生活大爆炸2 小时前
【知识】Linux将多条指令合并为一条执行
linux·运维·ubuntu
心灵宝贝5 小时前
CentOS 7 安装 bzip2-libs-1.0.6-13.el7.x86_64.rpm 的详细步骤
linux·运维·centos