我最近看到了一个小的 c 程序。在那个程序中,结构是以这种我无法理解的方式声明的。
struct
{
mynode *node;
unsigned vleft :1;
unsigned vright :1;
}save[100];
这里的节点是指向其他结构的指针。
有人可以解释一下unsigned vleft :1; 无符号 vright :1; 是?而且我找不到分配给 vleft 和 vright 的任何数据类型。这是什么原因?
谢谢。
我最近看到了一个小的 c 程序。在那个程序中,结构是以这种我无法理解的方式声明的。
struct
{
mynode *node;
unsigned vleft :1;
unsigned vright :1;
}save[100];
这里的节点是指向其他结构的指针。
有人可以解释一下unsigned vleft :1; 无符号 vright :1; 是?而且我找不到分配给 vleft 和 vright 的任何数据类型。这是什么原因?
谢谢。
此处假定的默认类型是unsigned int
,当您指定时,编译器会假定为unsigned
.
位域语法unsigned vleft : 1
指定数据域的位宽,在这种情况下,这意味着它是一个位标志(可以是0
或1
)。这用于将结构的许多字段打包成更少的位(当您不需要浪费时,例如在这种情况下,一个整体char
或int
仅用于存储一个标志)。
int
数据类型是隐含的,部分:1
表示这些成员只是 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