请帮我分析一下字节计算问题?

发布于 2022-07-21 11:53:45 字数 381 浏览 6 评论 7

32位机,采用字节对齐。
struct a {
    char t:4;
    unsigned short i:8;
    char k: 4;
};

count<<sizeof(a)<<endl ;  //为什么输出的结果是6啊,我分析来分析去应
                            //当是4啊。

请帮我解决一下,谢谢!!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

御弟哥哥 2022-07-28 02:38:12

字节对齐按照自身大小和制定的大小的较小值进行,类之间按成员最大值和制定参数的最小值进行
默认4字节对齐的话

struct a {
    char t:4;                      //自身为1,较小,按一字节对齐 放在位置 0                 
    unsigned short i:8;     //自身为2,较小,按2字节对齐, 放在2,3位置
    char k: 4;                    //自身为1,较小,按一字节对齐 放在位置4
};
上述实际占用了5个字节,

类之间按最大成员 unsigned short  进行,即按2对齐,5按2对齐即为6,所以sizeof=6

莳間冲淡了誓言ζ 2022-07-28 02:37:58

楼上的,我的测试结果与你的相同;
是不是于gcc的版本有关系,我这是3.4.3版本的!!

装纯掩盖桑 2022-07-28 02:37:48

#include <stdio.h>
struct a {
    char t:4;
    unsigned short i:8;
    char k: 4;
};
int main(void){
        printf("%dn",sizeof(struct a));
}

输出是2

放肆 2022-07-28 02:32:18

里面只讲到了\整个类型,没有讲到位的字节对齐啊.
比如:
struct a {
  int a : 8;
  int b : 8;
  int c : 8:
};

struct b {
  int a : 8;
  char c : 4;
  int d : 8;
};

怎么计算呢?

唱一曲作罢 2022-07-28 02:01:39

可以参考:
http://bbs.chinaunix.net/viewthread.php?tid=844212&highlight=关于sizeof

里面有详细的说明!

黯然#的苍凉 2022-07-27 22:31:02

不对啊,按你的分析方法,下面的应当是12而不是8啊,但计算输出是8。
struct a {
    char  t:4;
    unsigned int i:8;
    char k: 4;
};

深白境迁sunset 2022-07-25 01:51:51

字节对齐,
第一个 1字节
第二个 2,
但是要对齐,所以第一个凑齐2个字节
同理第三个也要凑齐2个字节
所以一共6个字节
如果你把第一个和第三个定义在第二个short前
那么应该是 4字节

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文