注册 登录
编程论坛 C++教室

请教一个关于位域变量所占字节大小的问题(内附程序)

Iamagays 发布于 2007-07-01 22:59, 905 次点击

# include <iostream.h>
void main()
{
union status
{
unsigned int good:1;
unsigned int failed:1;
unsigned int bad:1;
int val:9;
}data;
cout<< "sizeof(data)="<<sizeof(data)<<endl;
}

书上说,以上程序告诉编译器,good,fail,bad成员各占一位,val成员占用9位.


我觉得最终输出应该是sizeof(data)=3,即(1+1+1+9)/4=3.

但是答案是sizeof(data)=4.

小弟刚开始学C++,还望各位大侠指点...

4 回复
#2
野比2007-07-01 23:15

sizeof是根据其中的数据类型占用空间大小来进行输出的, 且单位是byte(8 bits)..
你为什么会认为它除以4呢? 要除也是除以8...
输出4是因为你使用了int来存放变量..
实际上, 内存中data的结构是这样的:

31 这是一个int 0 位
*--------------------------------*
| val|bad|failed|good|
*--------------------------------*
9bits 1 1 1 占用
所谓限定位宽(用冒号+位数), 只是在变量能容纳的范围内将几个变量合在一起而已...

#3
Iamagays2007-07-01 23:36
多谢版主阿,热心人...

除以4是我笔误了,不好意思.

那么版主的意思是不是:如果以上程序中凡是int的地方如果我用short int代替,那么将输出sizeof(data)=2。

是么?

[此贴子已经被作者于2007-7-1 23:38:26编辑过]

#4
野比2007-07-01 23:46
That's right.. You can try it out...
#5
Iamagays2007-07-01 23:59

谢 斑竹

1