1

可能重复:
这个 C++ 代码是什么意思?
“无符号温度:3”是什么意思?

我最近看到了一个小的 c 程序。在那个程序中,结构是以这种我无法理解的方式声明的。

struct
{
mynode *node;
unsigned vleft :1; 
unsigned vright :1; 
}save[100];

这里的节点是指向其他结构的指针。

有人可以解释一下unsigned vleft :1; 无符号 vright :1; 是?而且我找不到分配给 vleft 和 vright 的任何数据类型。这是什么原因?

谢谢。

4

3 回答 3

5

此处假定的默认类型是unsigned int,当您指定时,编译器会假定为unsigned.

位域语法unsigned vleft : 1指定数据域的位宽,在这种情况下,这意味着它是一个位标志(可以是01)。这用于将结构的许多字段打包成更少的位(当您不需要浪费时,例如在这种情况下,一个整体charint仅用于存储一个标志)。

于 2013-01-15T18:19:20.717 回答
1

int数据类型是隐含的,部分:1表示这些成员只是 1 位值。

于 2013-01-15T18:18:48.670 回答
1

vleft并且vright只能保存 1 位int数据(即01)。

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
于 2013-01-15T18:21:36.123 回答