分类: LINUX
2007-04-17 19:11:30
#include
int main()
{
//位字段声明
struct pack
{
unsigned a: 2; //说明a占2位
unsigned b: 6; //b占6位
} data;
printf("%d\n",sizeof(data));
data.b = 64;
printf("%d\n",data.b);
}
在VC编译器下运行,几个总结:
1。当你未初始化结构体的变量时,打印它里面的数据,结构都为零。
2。unsigned默认为unsigned int
3。上面的a + b只占一个字节,小于一个int,结果整个结构体只占4个字节(int占4个字节)。若它们所占的字节超过4,那么结构体将占两个int,即8个字节。要注意的是,无论是a还是b都不能超过它的类型的大小。
4。当给a或b赋值时,若超过它们的位数,输出的指将被截断。
5。结构体所占字节,要看a+b的结构值是多少,假如小于4字节(一个int),那么结构体将占4个字节,假如超过那么结构体就是8个字节,4的倍数。
注意:可以被说明成signed 但都要明确说明,还有就是不能对a,b进行&操作,因为它们不是地址。