包含int a:2的这个结构体占几个字节呢?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了包含int a:2的这个结构体占几个字节呢?相关的知识,希望对你有一定的参考价值。

参考技术A 说明int型是4字节呗。这样没有不理解啊,你看你的定义。
这是按位定义啊。
int
a:2;
a占两位
int
b:2;
b占两位
int
c:1;
c占一位
由于是int型,所以内存对齐,整个结构体就只占int型大小。(abc加起来才5位)
所以gcc测定的test是4个字节的int型啊。
补充:不明白楼主还有什么不懂。a只占两位,b也是只占两位,一个字节是8位。int是32位4个字节。a
b
c都是位定义,但是是int型对齐,a
b
c加一起一共占5位,连一个字节都不到,但是内存对齐,所以占32位4个字节。
参考技术B 位域(位段)
有些信息在存储时,并不需要占用一个完整的字节,而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1两种状态,用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。
所谓“位域”是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。这样就可以把几个不同的对象用一个字节的二进制位域来表示。
1.
位域的定义和位域变量的说明
位域定义与结构定义相仿,其形式为:
struct
位域结构名

位域列表
;
其中位域列表的形式为:
类型说明符
位域名:位域长度
例如:
struct
bs

int
a:8;
int
b:2;
int
c:6;
;
位域变量的说明与结构变量说明的方式相同。
可采用先定义后说明,同时定义说明或者直接说明这三种方式。
例如:
struct
bs

int
a:8;
int
b:2;
int
c:6;
data;
说明data为bs变量,共占两个字节。其中位域a占8位,位域b占2位,位域c占6位。
对于位域的定义尚有以下几点说明:
1)
一个位域必须存储在同一个字节中,不能跨两个字节。如一个字节所剩空间不够存放另一位域时,应从下一单元起存放该位域。也可以有意使某位域从下一单元开始。
例如:
struct
bs

unsigned
a:4
unsigned
:0
/*空域*/
unsigned
b:4
/*从下一单元开始存放*/
unsigned
c:4

在这个位域定义中,a占第一字节的4位,后4位填0表示不使用,b从第二字节开始,占用4位,c占用4位。
2)
由于位域不允许跨两个字节,因此位域的长度不能大于一个字节的长度,也就是说不能超过8位二进位本回答被提问者采纳

java中的char,short,int,long占几个字节

1:“字节”是byte,“位”是bit ;

  2: 1 byte = 8 bit ;

  char 在java中是2个字节。java采用unicode,2个字节(16位)来表示一个字符。

short 2个字节
int 4个字节
long 8个字节



以上是关于包含int a:2的这个结构体占几个字节呢?的主要内容,如果未能解决你的问题,请参考以下文章

为啥c#中bool要占4个字节 32位呢 为啥不用像byte 1个字节存储呢

int占多少字节?

char、int、long它们各占几个字节?占几位?

C语言中是否变量类型占几个字节,它的地址就占几个字节

C结构体之位域(位段)

java中的变量各占得字节数