收录日期:2019/10/18 22:48:32 时间: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的结果一样,但其它编译器不一定的,也可能是不一样的。

位字段应该少用为妙。

怎样才能将一个普通控件在报表中打印出来? 请问:installshield打包怎么将access数据库打包进去? 惨了,这下摆不平了!!! 程序员考试的结果什么时候出来? PCHAR类型不安全? InstallShield professional6.21制作的安装程序从控制面板中删除不了 欢迎Bardo今后常来这里做客! 请问删除表空间的SQL语句是什么? 有没有办法实现进程间函数调用????? 采用什么工具制作中文的CHM格式的帮助文件比较好? 急需解决的安装问题高分相送! 有没有办法实现进程间函数调用????? 谁能破解这个软件,500分就是谁的! 关于文件分配表!! 有没有办法实现进程间函数调用????? 如何在CSS中同时设置英文和中文字体的样式? 如何使外部应用程序与NOTES发生联系、通信 程序员平时是怎么放松的? 非GUI应用程序如何监听事件 为什么我远程连不上sql服务器 怎样才可以把JPG文件中的图片LOAD进一个CANVAS? 由于掉电引起的Sybase无法启动的问题? 怎样调用DLL,专家进入 模式窗口中怎么关闭父窗口? 提问一个form的问题 各位推荐一个比较好的购物车组件! 请问如何将页面中的热键去掉? object的instanceof是做什么的? 各位老大:在SCO Unix 5.05环境下为什么用NetTerm连接不上(上午都OK!)是什么原因??? 谁给我DirectX组件,20分