你混合二进制,整数
以二进制add s,t,d
编码是
“0000 00ss SSST TTTT DDDD D000 0010 0000”
所以你必须Concat的 “000000” +二进制(2)+二进制(3)+二进制(1)+ “00000100000”
其中二进制(x)是与固定二进制represenation 5个位数
你的情况
000000 + 00010 + 00011 + 00001 + 00000100000
= 00000000010000110000100000100000,它转换到
00430820h( “0000”= 0, “0000”= 0, “0100”=如图4所示, “0011”= 3, “0000”= 0, “1000”= 8, “0010”= 2, “0000”= 0)
,如果你把在编码细看,你看到
“000000ssssstttttddddd00000100000”
由4部分组成。第一是恒定的,其定义了指令,和3所定义的要使用的寄存器
"00000000000000000000000000100000" = 0x00000020
+ "000000sssss000000000000000000000" (which is s left shifted by 21)
+ "00000000000ttttt0000000000000000" (which is t left shifted by 16)
+ "0000000000000000ddddd00000000000" (which is d left shifted by 11)
所以最简单的方法于该指令进行编码是:以十六进制
uint32_t i = 0x00000020 + (s<<21) + (t<<16) + (d<<11);
打印此,你会得到: 00430820
当你输出文本到例如你使用过[*操纵器*](http://en.cppreference.com/w/cpp/io/manip)吗? '的std :: cout'?我还建议你停止使用数字文本,因为它比数字更难和繁琐地翻译文本。 –
当你的字符串包含更多的固定零时,它如何输出00430820?无论如何,完全同意以前的评论:得到一个32位整数并以正常方式以十六进制打印。 (搜索)。 –