在C中使用:运算符

可能重复:
结构字段后的’:number’是什么意思?
‘unsigned temp:3’是什么意思

各位大家好,我讨厌问这类问题,但这真的让我烦恼,所以我会问:

以下代码中:运算符的function是什么?

#include  struct microFields { unsigned int addr:9; unsigned int cond:2; unsigned int wr:1; unsigned int rd:1; unsigned int mar:1; unsigned int alu:3; unsigned int b:5; unsigned int a:5; unsigned int c:5; }; union micro { unsigned int microCode; microFields code; }; int main(int argc, char* argv[]) { micro test; return 0; } 

如果有人关心,我从以下链接中提取此代码: http : //www.cplusplus.com/forum/beginner/15843/

我真的很想知道,因为我知道我在某个地方之前已经看过这个,而且当我再次看到它时我想要了解它。

谢谢!

它们是位字段,例如unsigned int addr:9; 创建一个9位长的addr字段。

它通常用于将大量值组合成一个整数类型。 在您的特定情况下,它为(可能的)假设CPU定义32位微码指令的结构(如果将所有位域长度相加,则它们总和为32)。

联合允许您加载一个32位值,然后使用代码访问各个字段(修复了小问题,特别是codetest的声明):

 #include  struct microFields { unsigned int addr:9; unsigned int cond:2; unsigned int wr:1; unsigned int rd:1; unsigned int mar:1; unsigned int alu:3; unsigned int b:5; unsigned int a:5; unsigned int c:5; }; union micro { unsigned int microCode; struct microFields code; }; int main (void) { int myAlu; union micro test; test.microCode = 0x0001c000; myAlu = test.code.alu; printf("%d\n",myAlu); return 0; } 

这打印出7,即构成alu位域的三位。

这是一个领域 。 冒号后面的数字是每个变量占用的位数。

这是一个声明器,指定变量的位数。

有关更多信息,请参阅

http://msdn.microsoft.com/en-us/library/yszfawxh(VS.80).aspx