这个':'运算符在下面的C++代码中做了什么?为什么?
问题描述:
可能重复:
What does 'unsigned temp:3' means
what does this mean in c int a:16;?这个':'运算符在下面的C++代码中做了什么?为什么?
我碰到这个struct
在一些C++代码,我的工作来了。有人可以向我解释冒号操作员正在做什么以及为什么会使用它?
struct MYMSG
{
unsigned short src : 4;
unsigned short dst : 11;
unsigned short tx : 1;
};
答
如上所述,它是每个字段使用的位数。
struct MYMSG
{
unsigned short src : 4; // allows values 0 - 15
unsigned short dst : 11; // allows values 0 - 2047
unsigned short tx : 1; // allows values 0 - 1
};
如果关闭对齐,这也具有封装结构的效果。如果这个结构没有填充,那么调用sizeof()
将返回2(在8位/字节的体系结构上)。
在这种情况下,分配一个unsigned short
,并且位字段在该值内被分开。设置超出其中一个字段范围的值(如16
或src
)将导致该特定字段溢出,但不会更改任何其他字段的值(dst
的值不会更改)。
采取一种更钝例如:
struct T
{
unsigned long val : 4
};
这仍然分配一个完整的unsigned long
(在大多数架构32位),但只允许第一4
位给人0
有效值的设置 - 15
。
要分配的位数。 – cppcoder 2011-12-28 16:10:36
那么,在内存中的16位中,src字段只会使用4个LSB?或者它只分配4位? – bporter 2011-12-28 16:12:40
@bporter是src将只使用4位,但它可能不是4个LSB。编译器使用的布局因实现而异,没有标准。 – shf301 2011-12-28 16:15:07