收录日期:2020/06/02 10:27:11 时间:2016/06/06 10:24:20 标签:C语言
有个问题不明白
struct stru{
int a:3;
short b:3;
int c:20;
int d;

};
sizeof(stru)=16;

struct stru{
int a:3;
int b:3;    //或改为long b:3;或unsigned b:3;结果一样
int c:20;
int d;

};
sizeof(stru)=8;
这是结构体位域的问题

>> int b:3;    //或改为long b:3;或unsigned b:3;结果一样
这个位域定义与long int没有多大关系

标准的写法应该用unsigned型
第一个:
int a:3//1 byte
short b:3//因类型不同, 从下一个4字节处开始, 1byte
int c:20//因与上面类型不同, 从下一个4字节处开始, 3byte
int d;//类型相同, 但是不是位域, 也从下一个4字节开始
所以是16.
相当于:
int a:3;
int  :29;

short b:3;
short :29;

int c:20;
int :12;

int d; 
共16字节.
第二个分析同样.
楼上整解
int b:3;    //或改为long b:3;或unsigned b:3;结果一样
----------------------------------------------
位字段的类型是implementation-defined的,不仅类型如此,甚至最高位是否为符号位也是implementation-defined的,在C99里,位字段的类型甚至还可以是Bool类型。不同的编译器可能会有不同的结果,在你使用的编译器里面,可能long b:3或unsigned b:3的结果一样,但其它编译器不一定的,也可能是不一样的。

位字段应该少用为妙。

为什么无论运行哪个jsp都是404错误 不太明白 Physx3.x中的一些问题 vc6.0允许将void指针赋给其他类型的指针,但为什么GCC不允许,哪个编译器是遵循了标准的? 这个查找语句怎么写? 多线程socket数组对象,直接被NEW重写是否可行? OPEN系 COBOL 初学JAVA,一个对你们很简单的问题,60分拿去,急用 有关oracle读取大文本问题 散分 哪位兄台帮忙翻译个SQL Server 2008的脚本,翻译为Oracle 10 G上能运行的(雪地狂等!!) 一个c++的简单小程序,各位大师帮我看下哪错了~~~~ 请问各位进程间通信用哪一种方式好点儿呢? 应届毕业生一年经验请收养 SQL语句中使用正则表达式 当类类型需要声明为extern的时候,其成员应该如何声明?? 隐藏自己的IP 怎么修改软件中的硬件编号 从电影《钱学森》观后感联想到我们的软件现状 关于vc++2005的问题 C#连接数据库时提示未指定的错误 如何在停止操作我的网址5分钟后自动注销登录界面 想买只狗狗养…… 怎么知道自己是不适合写代码 如何使label的位置设置成自动 请问在解析网页时,在浏览器中右键-查看源文件是不是就是该网页的XML? 关于Timer控件 难:如何使jlabel不覆盖背景图片 如何给新的session添加authentication 难:如何使jlabel不覆盖背景图片 mfc中COMBOX控件问题