你混合二進制,整數
以二進制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位整數並以正常方式以十六進制打印。 (搜索)。 –