在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位值,然后使用代码访问各个字段(修复了小问题,特别是code
和test
的声明):
#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
位域的三位。
这是一个领域 。 冒号后面的数字是每个变量占用的位数。