结构中的无符号数据类型

时间:2013-01-15 18:16:02

标签: c structure

  

可能重复:
  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的数据类型。这是什么原因?

感谢。

3 个答案:

答案 0 :(得分:5)

此处假设的默认类型为unsigned int,当您仅指定unsigned时,编译器会采用此类型。

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

vleftvright只能保存1位int数据(即。01)。

unsiginedunsigned 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