引入原碼 反碼 和補碼的目的就是為了解決減法問題,因為計算機CPU的運算器中只有加法器,要把減法轉化成加法來計算.
舉個例子,A表示十進位制數“+16”,B表示十進位制數“-19”,把這兩個數的原碼直接相加,得:
A=+16 (A)原=00010000
B=-19 (B)原=1001001100010000 +10010011
————
10100011
其結果符號位為1是負數,其數值位為100011,即等於十進位制數“-35”,這顯然是錯的結果.再比如,十進位制數“+16”與“+19”的原碼直接相減,得:
00010000 -00010011
11111101
結果為“-125”,這又是錯的.
但是引入補碼後,加減法都可以用加法來實現,如“-16+11”的運算:
11110000 + -16的補碼
00001011 11的補碼
11111011 -5的補碼
如果是“-16-11”,那麼就轉化為加法運算“-16+(-11)”
11110000 + -16的補碼11110101 -11的補碼
111100101 -27的補碼
在字長為8位的系統中,最高位所產生的進位被自然丟棄,運算結果的機器數為11100101,是-27的補碼形式,結果正確.
順便告訴你一些其它的東西:
1.二進位制數中,兩數的補碼之和等於兩數和的補碼.
2.補碼=反碼+1
3.反碼=原碼除符號位外其它數值取反(即該數的絕對值取反),即“0”變“1”,“1”變“0”.
4.任何正數的原碼 反碼 補碼的形式完全相同(即都是自身,不變)
5.在計算機中,有符號的數都是採用補碼來表示的.
6.計算的時候,符號位也參與運算.
引入原碼 反碼 和補碼的目的就是為了解決減法問題,因為計算機CPU的運算器中只有加法器,要把減法轉化成加法來計算.
舉個例子,A表示十進位制數“+16”,B表示十進位制數“-19”,把這兩個數的原碼直接相加,得:
A=+16 (A)原=00010000
B=-19 (B)原=1001001100010000 +10010011
————
10100011
其結果符號位為1是負數,其數值位為100011,即等於十進位制數“-35”,這顯然是錯的結果.再比如,十進位制數“+16”與“+19”的原碼直接相減,得:
00010000 -00010011
————
11111101
結果為“-125”,這又是錯的.
但是引入補碼後,加減法都可以用加法來實現,如“-16+11”的運算:
11110000 + -16的補碼
00001011 11的補碼
————
11111011 -5的補碼
如果是“-16-11”,那麼就轉化為加法運算“-16+(-11)”
11110000 + -16的補碼11110101 -11的補碼
————
111100101 -27的補碼
在字長為8位的系統中,最高位所產生的進位被自然丟棄,運算結果的機器數為11100101,是-27的補碼形式,結果正確.
順便告訴你一些其它的東西:
1.二進位制數中,兩數的補碼之和等於兩數和的補碼.
2.補碼=反碼+1
3.反碼=原碼除符號位外其它數值取反(即該數的絕對值取反),即“0”變“1”,“1”變“0”.
4.任何正數的原碼 反碼 補碼的形式完全相同(即都是自身,不變)
5.在計算機中,有符號的數都是採用補碼來表示的.
6.計算的時候,符號位也參與運算.