按位使用数据以及union

本文转载自 http://www.cppblog.com/xyjzsh/archive/2011/03/15/141901.html

按位使用数据以及union

例如:
typedef union tagData
{
   long x:2;
   long y:4;
   long data;
}data_item,*pdata_item;

上述是一个联合体,联合体的对象用的空间是类型中占用内存最大的哪个,例如上例中data_item变量占用4个字节。
long x:2;
表示x占用2bit
long y:4;
表示y占用4bit
long data;
data占用4byte
所以上述union占用4byte空间。
long s=sizeof(data_item);
s=4;

因为x,y,data公用内存空间。
从低位开始,即
x占用空间的低2bit,即0-1
y占用空间2~5bit
x,y都是可以是有符号的,相对最高位表示符号位。
例如,
item_data t={0};
(1) t.data = 2;
2表示成二进制位10.
所以t.x 的值为-2;
(2) t.data = 3;
3表示成二进制位11
所以t.x的值为-1
(3) t.data =1;
此时t.x的值为1

t.y的取值的道理同t.x;
对于t.y来说第5位表示正负号。

原文地址:https://www.cnblogs.com/thoughtInShare/p/14060376.html