使用:C语言中的运算符[重复]

wz8daaqr  于 2023-01-20  发布在  其他
关注(0)|答案(3)|浏览(128)
    • 此问题在此处已有答案**:

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/
我真的很想知道,因为我知道我以前在什么地方见过这个,我想在我再次看到它的时候理解它。

bz4sfanl

bz4sfanl1#

它们是位字段,例如unsigned int addr:9;创建了一个9位长的addr字段。
它通常用于将大量的值打包成整型,在你的特定情况下,它定义了一个32位微码指令的结构,用于一个(可能)假想的CPU(如果你把所有的位字段长度加起来,它们的总和是32)。
该联合允许加载单个32位值,然后使用如下代码访问各个字段(还修复了一些小问题,特别是codetest的声明):

#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;
}

这将打印出7,这是组成alu位字段的三个位。

piwo6bdm

piwo6bdm2#

它是bit field,冒号后面的数字是每个变量占用的位数。

0lvr5msh

0lvr5msh3#

这是一个声明符,指定变量的位数。
有关详细信息,请参阅:
http://msdn.microsoft.com/en-us/library/yszfawxh(VS.80).aspx

相关问题