位段式结构体例题

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

相关推荐
CoovallyAIHub4 分钟前
外科医生离手术世界模型还有多远?首次提出SurgVeo基准,揭示AI生成手术视频的惊人差距
深度学习·算法·计算机视觉
t198751285 分钟前
基于ELM算法在近红外光谱和拉曼光谱数据处理
算法
xqlily29 分钟前
Prover9/Mace4 的形式化语言简介
人工智能·算法
资深web全栈开发1 小时前
二分搜索中 `right = mid` 而非 `right = mid + 1` 的解释
算法·rust·二分搜索
洋芋土豆1 小时前
linux用户及权限管理
linux·运维·服务器
玖笙&2 小时前
✨WPF编程进阶【7.1】动画基础
c++·c#·wpf·visual studio
QT 小鲜肉2 小时前
【C++基础与提高】第一章:走进C++的世界——从零开始的编程之旅
开发语言·c++·笔记·qt
狮子也疯狂2 小时前
基于Django实现的智慧校园考试系统-自动组卷算法实现
python·算法·django
@木辛梓2 小时前
模版 c++
开发语言·c++
爱coding的橙子2 小时前
每日算法刷题Day84:11.11:leetcode 动态规划9道题,用时2h
算法·leetcode·动态规划