免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1339 | 回复: 3
打印 上一主题 下一主题

请教位域问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-11-13 22:34 |只看该作者 |倒序浏览
#include <stdio.h>


int main(){
struct bs{
int a:2;
int b:2;
int c:2;
};
printf("%d\n",sizeof(bs));
return 1;
}

结果怎么会是4呢?在G++ 3.2.3中调试

论坛徽章:
0
2 [报告]
发表于 2006-11-14 10:52 |只看该作者
我明白了,原来位域与机器有关,要是是32位机的话,就以32位为单位,要是有误,请各位牛牛指出。

论坛徽章:
0
3 [报告]
发表于 2006-11-14 14:24 |只看该作者
原帖由 jiaozhao 于 2006-11-13 22:34 发表
#include <stdio.h>


int main(){
struct bs{
int a:2;
int b:2;
int c:2;
};
printf("%d\n",sizeof(bs));
return 1;
}

结果怎么会是4呢?在G++ 3.2.3中调试



在结构中定义位的时候要注意边界对齐 虽然定义的结构并不满一个整型变量的空间 但是计算空间的时候还是按照一个整型算的
还是你的例子 我稍微改一下~


int main(){
struct bs{
char a:2;
int b:2;
char c:2;
};
printf("%d\n",sizeof(bs));
return 1;
}

结果是多少呢 12
虽然变量a和c只是8bit  但是计算空间的时候按照边界对齐原则还是按整型空间算的

论坛徽章:
0
4 [报告]
发表于 2006-11-14 19:07 |只看该作者
对齐以后,一共四个字节(一个 32 位整数的长度)。
int a:2; 是表示 a 占两个二进制位(用在这里,效果就是 a 只能表示 -2,-1,0,1)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP