可能重复:
What does this C++ code mean?
What does ‘unsigned temp:3’ mean?
我最近看过一个小的c程序。在那个程序中,结构以这种方式声明,我无法理解。
struct
{
mynode *node;
unsigned vleft :1;
unsigned vright :1;
}save[100];
这里的节点是指向其他结构的指针。
有人可以解释一下 unsigned vleft:1; unsigned vright:1; 是?而且我找不到任何分配给vleft和vright的数据类型。这是什么原因?
感谢。
答案 0 :(得分:5)
此处假设的默认类型为unsigned int
,当您仅指定unsigned
时,编译器会采用此类型。
位域语法unsigned vleft : 1
指定数据字段的位宽度,在这种情况下,它意味着它是单个位标志(可以是0
或1
)。这用于以较少的比特打包结构的许多字段(当你不需要浪费时,比如在这种情况下,整个char
或int
仅用于存储标志)。
答案 1 :(得分:1)
隐含int
数据类型,:1
部分表示这些成员只是1位值。
答案 2 :(得分:1)
vleft
和vright
只能保存1位int
数据(即。0
或1
)。
unsigined
是unsigned int
的缩写形式。以下是一些C数据类型的简短形式。
short = short int = signed short = signed short int
unsigned short = unsigned short int
int = signed int
unsigned = unsigned int
long = long int = signed long = signed long int
unsigned long = unsigned long int
long long = long long int = signed long long = signed long long int
unsigned long = unsigned long int