計算機中都是用補碼表示的。因為正數的原碼,補碼,反碼 相同, 所以正數用原碼表示,負數用補碼表示。負數如果也用原碼表示,表示範圍就只有255個數 -128無法表示。
最高位是0表示正數,是1表示負數。
10000000 表示 -128 的補碼,你可以理解為是乙個特殊性。
各種8位二進位制的表示法的資料範圍如下:
原碼: -127 ~ 127
反碼: -127 ~ 127
補碼: -128 ~ 127
補碼運算:正數為原碼本身,負數為原碼取反加一
127 為正數,其補碼 為 原碼 0111 1111
-127為負數,其補碼 為 原碼 0111 1111 取反 1000 0000 加 1 即1000 0001。(負數的補碼:絕對值取反,然後加 1)
根據這情況來看,表示 -0,不是的,-0 的原碼是1000 0000 補碼是 0000 0000。+0 的補碼也是 0000 0000
於是就有了規定 1000 0000 定為 -128 的補碼,這種定法和上面數學層面的表述是一致的。
這樣規定後,負數的補碼在機器中就好算了。在約定的範圍內(-128-+127,對16位32位64位等擴大範圍)
先將該負數取絕對值,再用二進位制表示出這個絕對值 (不管符號位),對該二進位制數進行取反加一操作就得到負數的補碼了
-128 絕對值是 128
128的二進位制表示為:
1000 0000
取反0111 1111
加11000 0000
這就是-128的補碼
這種辦法算出的結果符合「規定值」,規定而已。
正數
正數(定點小數、定點整數):
原碼,補碼,反碼相同;
移碼只要在原碼的最高位+1就可以了
負數
負數(定點小數、定點整數)
負數補碼求法:也就是 「絕對值的原碼取反加1」
反碼:保持原碼符號位不變,數值位取反
補碼:反碼的最低位+1 (即 取反加1,符號位也運算)
移碼:與補碼的符號相反,數值位保持不變
-1 原碼:1000 0001
-1 反碼:1111 1110 (符號位不變,數值位取反)
-1 補碼:1111 1111 (-1的反碼加1:1111 1110 +1 = 1111 1111)
原碼
將最高位做為符號位(0代表正,1代表負),其餘各位代表數值本身的絕對值
+7的原碼是:00000111
-7的原碼是:10000111
+0的原碼是:00000000
-0的原碼是:10000000
反碼
乙個數如果值為正,那麼反碼和原碼相同
乙個數如果為負,那麼符號位為1,其他各位與原碼相反
+7的反碼:0000 0111
-7的反碼:1111 1000
-0的反碼:1111 1111
補碼
求乙個負數的補碼時,取反加1時需要符號位參與運算,補碼運算(加減)也需要符號位參與運算
負數的補碼:符號位不動,其他位求反,最後整個數 + 1,得到原碼
原碼和反碼都不利於計算機的運算,如:原碼表示的 7 和 -7 相加,還需要判斷符號位。
正數:原碼,反碼補碼都相同
負數:最高位為1,其餘各位原碼取反,最後對整個數 + 1
+0 的 補碼 為 00000000
-0 的 補碼 也是 00000000
原碼補碼
+0
0000 0000
0000 0000
-01000 0000
符號位不變其他位取反得到1111 1111,然後加 1(符號位參與運算,即整個數加1) 得到補碼 0000 0000 ,所以 +0 和 -0 補碼一樣
-7 的補碼:=
1 000 0111 (原碼)
1 111 1000 (反碼)
1 111 1001 (補碼)
兩個補碼運算(加減)符號位參與運算
。
+7 補碼 0000 0111
-7 補碼 1111 1001
+7 的補碼 加 -7 的補碼
0000 0111
1111 1001
0000 0000
補碼運算
用補碼進行運算,減法可以通過加法實現
7-6=1 (7 的補碼 和 -6 的補碼 相加)
7 的補碼 :0000 0111
-6 的補碼: 1111 1010
= 1 0000 0001
最後的進製溢位(總共 8 位,這得到 9位,所以第 9 位捨棄),所以捨棄,得到 0000 0001 ,表示 1
-7+6 = -1
-7的補碼和6的補碼相加:11111001 + 00000110 = 11111111
11111111是-1的補碼
原碼 反碼 補碼
正數 原碼 反碼 補碼一樣 7 原 0 0000111 b 7 反 0 0000111 b 7 補 0 0000111 b 負數 原碼就是原來的表示方法 反碼是除符號位 最高位 外取反 補碼 反碼 1 7 原 1 0000111 b 7 反 1 1111000 b 7 補 1 1111001 b 當...
原碼 反碼 補碼
正數 原碼 反碼 補碼一樣 7 原 0 0000111 b 7 反 0 0000111 b 7 補 0 0000111 b 負數 原碼就是原來的表示方法 反碼是除符號位 最高位 外取反 補碼 反碼 1 7 原 1 0000111 b 7 反 1 1111000 b 7 補 1 1111001 b 當...
原碼 反碼 補碼
數值在計算機中表示形式為機器數 計算機只能識別0和1,使用的是二進位制,而在日常生活中人們使用的 是十進位制,正如亞里斯多德早就指出的那樣,今天十進位制的廣泛採用,只不過我們絕大多數人生來具有10個手 指頭這個解剖學事實的結果.儘管在歷史上手指計數 5,10進製 的實踐要比二或三進製計數出現的晚.摘...