位段式结构体例题

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

相关推荐
柏木乃一18 小时前
进程(8)虚拟地址空间/虚拟内存概述.part1
linux·服务器·c++·进程·虚拟内存·fork
怎么没有名字注册了啊18 小时前
(Mac)Visual Studio Code 配置 C/C++运行环境
c++·vscode·macos
wa的一声哭了18 小时前
内积空间 正交与正交系
java·c++·线性代数·算法·矩阵·eclipse·云计算
SWAGGY..18 小时前
数据结构学习篇(8)---二叉树
数据结构·学习·算法
西幻凌云18 小时前
认识设计模式——工厂模式
c++·设计模式·简单工厂模式·抽象工厂模式·工厂模式
星轨初途18 小时前
牛客小白月赛126
开发语言·c++·经验分享·笔记·算法
leoufung18 小时前
动态规划DP 自我提问模板
算法·动态规划
fqbqrr18 小时前
2601,链式调用
c++
爱编程的小吴18 小时前
【力扣练习题】热题100道【哈希】560. 和为 K 的子数组
算法·leetcode·哈希算法
oMcLin18 小时前
CentOS 7.6 磁盘空间不足导致服务崩溃:如何有效清理日志文件和临时文件
linux·运维·centos