位段式结构体例题

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

相关推荐
LYFlied18 小时前
【每日算法】LeetCode 279. 完全平方数(动态规划)
前端·算法·leetcode·面试·动态规划
Ghost Face...18 小时前
U-Boot与PMON:配置与设备树解析对比
linux·单片机·嵌入式硬件
何小义的AI进阶路18 小时前
win下 vscode下 C++和opencv的配置与使用
c++·图像处理·vscode·opencv
技术摆渡人18 小时前
Android 全栈架构终极指南:从 Linux 内核、Binder 驱动到 Framework 源码实战
android·linux·架构
scx2013100418 小时前
20251201换根DP总结
算法·动态规划·换根dp
zd20057218 小时前
STREAMS指南:环境及宿主相关微生物组研究中的技术报告标准
人工智能·python·算法
qq_2546177718 小时前
Linux创建VLAN虚拟网卡的命令
linux·网络协议
TechNomad19 小时前
排序算法:基数排序算法
算法·排序算法
wdfk_prog19 小时前
[Linux]学习笔记系列 -- [fs][fs_parser]
linux·笔记·学习
努力学算法的蒟蒻19 小时前
day43(12.24)——leetcode面试经典150
算法·leetcode·面试