位段式结构体例题

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

相关推荐
想要成为糕糕手8 分钟前
NO.48 旋转图像 —— LeetCode 热题 100 面试导向深度解析
javascript·算法·面试
aramae15 分钟前
C++11:现代C++的里程碑
c语言·开发语言·c++·windows·git·后端
JieE21223 分钟前
LeetCode 138 随机链表的复制|两种解法详解(哈希表 + 原地 O (1) 空间)
javascript·算法·面试
执行x23 分钟前
wsl2安装+桥接模式+固定IP
linux·windows·ubuntu
专注于ai算法的踩坑小达人35 分钟前
时序预测主流模型综述
算法·lstm
小手智联老徐1 小时前
Ubuntu 下 CuteCom 串口调试工具指南:安装、权限配置与数据记录
linux·运维·ubuntu
HZZD_HZZD1 小时前
碳核查场景下能源计量数据精准采集与碳排放核算算法全链路实战:从智能电表协议适配到排放因子动态计算
算法·能源
Felven1 小时前
麒麟信安操作系统掉电保护方案
linux·运维·麒麟信安·硬盘保护
云栖梦泽1 小时前
将RAW打包成MIPI CSI2
linux·人工智能·嵌入式硬件
啦啦啦啦啦zzzz2 小时前
c++web服务器框架Oat++的API应用
服务器·c++·oat++