大家好,我讨厌问这类问题,但这真的让我烦恼,所以我会问:
以下代码中:运算符的功能是什么?
#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;
}
Run Code Online (Sandbox Code Playgroud)
如果有人关心,我从以下链接中提取此代码:http: //www.cplusplus.com/forum/beginner/15843/
我真的很想知道,因为我知道我在某个地方之前已经看过这个,而且当我再次看到它时我想要了解它.
谢谢!
pax*_*blo 51
它们是位字段,例如unsigned int addr:9;创建一个addr9位长的字段.
它通常用于将大量值组合成一个整数类型.在您的特定情况下,它为(可能的)假设CPU定义32位微码指令的结构(如果将所有位域长度相加,则它们总和为32).
联合允许您加载一个32位值,然后使用代码访问各个字段(固定的小问题,特别是code和的声明test):
#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;
struct microFields code;
};
int main (void) {
int myAlu;
union micro test;
test.microCode = 0x0001c000;
myAlu = test.code.alu;
printf("%d\n",myAlu);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这打印出7,即构成alu位字段的三位.
| 归档时间: |
|
| 查看次数: |
29069 次 |
| 最近记录: |