我定义了以下结构:
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位保存所有可能的值,依此类推。
我怎样才能做到这一点?
答案 0 :(得分:2)
在存储之前将二进制数转换为十进制。在存储到10
之前,将二进制2
转换为group
。
我想对此发表评论但由于声誉不佳而无法做到。
编辑 -
如果您使用的是c ++,则可以使用0b
直接转换它。
示例 -
0b1
表示二进制1或十进制0
0b10
表示二进制10或十二进制
0b100
表示二进制100或十进制4
或者在标准C中,你可以创建一个函数,在我们的例子中使用binary format
整数,如10
,并返回转换后的十进制值2
。稍后您可以使用像shift这样的bitwisee操作来检索您的位。