首页 > 试题广场 >

32位环境下,给定结构体 Struct A { Ch

[单选题]

32位环境下,给定结构体

Struct A

{

Char t:4;

Char k:4;

Unsigned short i:8;

Unsigned long m;

};
sizeof A =_____;
  • 7
  • 6
  • 8
  • 上述答案都不对
对于结构体,每个成员都有自己独立的地址,他们同时存在,sizeof(struct)是内存对齐后所有成员长度的总和。在32位里,char是1,short是2,long是4
发表于 2020-08-22 18:08:56 回复(3)
结构体里面,冒号表示位域,两个char一共占8位,一个unsigned short也占8位,最后有个unsigned long占4个字节,加起来一共占了6个字节,但是为了字节对齐,32位会对齐到4的倍数,因此选C
发表于 2022-04-28 14:27:31 回复(0)
一般遇到这种题我是这么理解的
第一步:先看是32位还是64位,以本题为例,如果是32位,那么可以得到以下信息:(1)内存对齐方式是以4字节对齐(也就是说不够4字节就补满);(2)指针是4字节(因为32位/8比特=4字节)
第二步:就开始看数据类型,本题中有两个char,那么就总共占2个字节;short占2个字节,和前面的两个char一起正好是4字节(刚刚好不用补);long是4字节,也不用补,
第三步:计算(这个计算结果一定是4字节的整数倍),一个填满的4字节+一个long的4字节=总共8字节。因此答案是8字节
发表于 2021-05-11 15:32:04 回复(0)
如图

char 是1字节,unsigned short 是2字节,unsigned long 是4字节。32位是4字节对齐的,两个char占两字节,一个unsigned short 是2字节,刚好4字节,4+4=8字节。
发表于 2022-11-07 09:33:42 回复(0)
所以都在分析,最后答案是多少?24?

发表于 2021-03-10 15:27:24 回复(0)
32位环境,会按照32位一组来对齐。 如果整个结构中,不足32位,全部放到这32位里面,如果大于32位,则不足32位的地方进行补齐。
Struct A

{

Char t:4;         //比特位方式,char类型占第一个32bit的前0-3个bit   

Char k:4;       //比特位方式,占第一个32bit的前4-7个bit 。第一个char类型占满,后面是一个short,所以按照short类型对齐,
                      第一个32bit的前8-15个bit,作为占位符补齐
Unsigned short i:8;  //比特位方式,short类型,大小为8个bit , 第一个32bit的前16-23个bit,后面24-31bit补位

Unsigned long m;   放到第二个32bit中

};
发表于 2020-12-11 10:47:10 回复(0)
sizeof(A)求的是内存对齐后所有成员变量所占的字节数。32位环境中,char占1个字节,但是在结构体A中,char t : 4  占4比特位,两个char各占1个字节,类似的 i 占1个字节,m占4个字节,内存对齐后 sizeof(A)为8个字节<br>
编辑于 2020-09-28 08:34:02 回复(0)
两个原则:当前变量的位数是该变量的整数倍,整体大小是最大变量的整数倍。
t->1,k->1,i->2,m->4,正好满足~~~
发表于 2020-08-30 19:26:23 回复(3)