如何使用C中的n位表示基数2中n位的所有可能值?

时间:2017-03-20 13:59:57

标签: c field bits

我定义了以下结构:

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位保存所有可能的值,依此类推。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:2)

在存储之前将二进制数转换为十进制。在存储到10之前,将二进制2转换为group

我想对此发表评论但由于声誉不佳而无法做到。

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

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

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

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

或者在标准C中,你可以创建一个函数,在我们的例子中使用binary format整数,如10,并返回转换后的十进制值2。稍后您可以使用像shift这样的bitwisee操作来检索您的位。

相关问题