回覆列表
-
1 # 使用者9471595215301
-
2 # 使用者1788346970835
對於正數和負數,補碼規則不同,所以求原碼方式也有所不同。無符號數與正數的方法相同。
1 對於最高位為0的有符號數,或無符號數,補碼就是原碼本身。如
0111 1100 既是補碼,同時也就是原碼。
2 對於最高位為1的有符號數,其表示的是負數。原碼為按位取反,末位加一。如
補碼:1100 0111
按位取反後結果為:0011 1000
加一後得到: 0011 1001
於是其原碼就是-0011 1001
我幫你解決這個問題,作為交換,如果以後有陌生人問你這麼簡單的問題,請幫他耐心解答。
一. 先從理論上認識一下原碼,補碼,反碼。 (你問這個問題,我就當你有相關知識基本概念,大致講講)
1. 二進位制有便於類比電路或與非、便於計算機設計、抗干擾性強的好處(我當年的機組書上大概是這個意思)——於是誕生了原碼;
2.原碼無法解決正負相加等於0的問題(你可以自己找個正負樹原碼加一下)——於是引入了反碼;
3.原碼,反碼有兩個0(正負0),為了解決這個問題引入了補碼(補碼的0表示是唯一的)
二. 十進位制化為原碼(我以正負47舉例)
這就求出了47的8位原碼,當然你也可以直接拼湊出來,我這樣用算的思路是便於你以後寫程式的時候便於設計算法。
1.原碼 最高位為符號位:
+47的16位原碼:0000 0000 0010 1111 ; -47的16位原碼:1000 0000 0010 1111
2.反碼 正數和原碼相同。負數在原碼的基礎上除符號位為其餘各位取反:
+47的16位反碼:0000 0000 0010 1111 ; -47的16位反碼:1111 1111 1101 0000
3.補碼 正數和原碼、反碼相同。負數在反碼的基礎上最低位加1(二進位制演算法)
+47的16位補碼:0000 0000 0010 1111 ; -47的16位補碼:1111 1111 1101 0001
計算方法如下:
其餘的自己算吧,還有不懂的可以私我,最好自己照著思路推算出其他的。