位段式结构体例题

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

相关推荐
铉铉这波能秀6 分钟前
LeetCode Hot100数据结构背景知识之字典(Dictionary)Python2026新版
数据结构·python·算法·leetcode·字典·dictionary
释怀不想释怀7 分钟前
Linux文件上传(rz)和下载(sz)压缩(tar.gz)和解压(zip)
linux·运维·服务器
蜡笔小马15 分钟前
10.Boost.Geometry R-tree 空间索引详解
开发语言·c++·算法·r-tree
酉鬼女又兒21 分钟前
零基础入门Linux指南:每天一个Linux命令_sed
linux·运维·服务器
唐梓航-求职中24 分钟前
编程-技术-算法-leetcode-288. 单词的唯一缩写
算法·leetcode·c#
daad77724 分钟前
tcpdump_BPF
linux·测试工具·tcpdump
仟濹25 分钟前
【算法打卡day3 | 2026-02-08 周日 | 算法: BFS】3_卡码网99_计数孤岛_BFS | 4_卡码网100_最大岛屿的面积DFS
算法·深度优先·宽度优先
予枫的编程笔记27 分钟前
【Linux进阶篇】Linux网络配置+端口监听实战:ip/ss/iptables常用命令一次吃透
linux·iptables·网络配置·curl·端口监听·ping·ss命令
Ll130452529829 分钟前
Leetcode二叉树part4
算法·leetcode·职场和发展
林开落L29 分钟前
从零开始学习Protobuf(C++实战版)
开发语言·c++·学习·protobuffer·结构化数据序列化机制