如何使用 C 中的 n 位表示以 2 为底的 n 位的所有可能值?

How can I represent all the possible values of n bits in base 2 using n bits in C?

我定义了以下结构:

typedef struct
{
    int unused :8;
    int group  :2;
    int opcode :4;
    int source_mode :2;
    int   dest_mode :2;
    int   are       :2;

}first_word;

我希望每个字段都能够保存所有可能的值,这些值可以使用它在基数 2 的结构中接收到的位来表示。

例如:

包含 2 位的字段的可能值为:

00  /*0 in base 2*/
01  /*1 in base 2*/
10  /*2 in base 2*/
11  /* 3 in base 2 */

由于十进制中的 10 是以 2 为底的 4 位表示的,我不能这样做:

int main()
{ 
     first_word fw;
     fw.group = 10;
     return 0;
}  

否则,我会收到以下错误:

main.c: In function ‘main’:
main.c:21:17: warning: overflow in implicit constant conversion [-Woverflow]
      fw.group = 10;
                ^~

同样,我希望操作码能够使用 4 位保存所有可能的值,依此类推。

我怎样才能做到这一点?

在存储之前将二进制数转换为十进制数 it.Like 在存储到 group.

之前将二进制数 10 转换为 2

我想对此发表评论,但由于声誉太低而无法发表评论。

编辑- 如果你用的是c++,可以直接用0b转换。 示例-

0b1表示二进制1或十进制0

0b10表示二进制10或十进制2

0b100表示二进制100或十进制4

或者在标准 C 中,您可以创建一个函数,它接受 binary format 整数,例如我们的 10 和 returns 转换后的十进制值 2。稍后您可以使用移位等位运算来检索您的位。