- 此问题在此处已有答案**:
12年前就关闭了。
- 可能重复:**
What does ‘: number’ after a struct field mean?
What does ‘unsigned temp:3’ means
我讨厌问这种问题,但它真的困扰着我,所以我会问:
的功能是什么:下面代码中的运算符?
#include <stdio.h>
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/
我真的很想知道,因为我知道我以前在什么地方见过这个,我想在我再次看到它的时候理解它。
3条答案
按热度按时间bz4sfanl1#
它们是位字段,例如
unsigned int addr:9;
创建了一个9位长的addr
字段。它通常用于将大量的值打包成整型,在你的特定情况下,它定义了一个32位微码指令的结构,用于一个(可能)假想的CPU(如果你把所有的位字段长度加起来,它们的总和是32)。
该联合允许加载单个32位值,然后使用如下代码访问各个字段(还修复了一些小问题,特别是
code
和test
的声明):这将打印出7,这是组成
alu
位字段的三个位。piwo6bdm2#
它是bit field,冒号后面的数字是每个变量占用的位数。
0lvr5msh3#
这是一个声明符,指定变量的位数。
有关详细信息,请参阅:
http://msdn.microsoft.com/en-us/library/yszfawxh(VS.80).aspx