1. 什麼叫"負數用補碼表示"
補碼,來自於:補數。
一般的常識:
鍾表時針,倒撥 3 小時,可以用「正撥 9 小時」來代替。
分針,倒撥 X 分,可以用 正撥 60-X 代替。
搜嘩孫60 是分針的周期。
十進制數,兩位:0~99,周期就是一百。
-1 可以用 +99 代替。
如:25 - 1 = 24
25 + 99 = (1) 24
忽略進位 1 百,結果就是相同的。
那麼,-1 的補數,就是 99 。
-2 的補數,就是 98 。
-X 的補數,就是【 周期 + 該負數 】。
--------世鏈
藉助於補數,就可蘆手以用加法,代替減法運算。
所以,計算機就可以節省硬體了。
--------
八位二進制:0000 0000~1111 1111(0~255)。
周期是 256。
那麼,-1 可以用 1111 1111 (+255) 代替。
即:
-1 的補碼,就是 1111 1111 (= 256-1=+255) 。
-2 的補碼,就是 1111 1110 (= 256-2=+254) 。
。。。
-X 的補數,就是【 周期 + 該負數 】。
-128,就可以用 1000 0000(= 128)代替 。
正數,不需要變換,直接運算即可。
--------
在計算機中,負數,就是用補碼存儲、計算的。
原碼和反碼,毫無用處,它們在計算機中都不存在。
2. 為什麼c語言負數是以補碼形式存放的
為什麼 C 語言負數是以補碼形式存放的?
------------------
這個事,和 C 語言沒有任何關系拿塌。
因為,計算機本身,它就是「用補碼存儲正負數字」。
C 語言的程序,在計算機中運行,也就必須「用補碼存儲正負數」。
而且,無論你用任消賀圓何編程語言編拍肢寫程序,負數,都是用補碼存放的。
3. 為什麼負數要以補碼形式存儲
補碼的功能類似於:時針倒撥 3 小時,與正撥 9 小時,效果相同。
那麼,計算機中的負數,也可以改為正數(即補碼)。
同時,減法運算,也就可以用加法運算代替了。
於是,藉助於補碼,就統一了加減法,就能夠簡化計算機的硬體。
十進制比較容易理解:
25 - 1 = 24
25 + 99 = (一百) 24。
只要忽略進位,+99 就能代替-1。
+99 就稱為-1 的補數。
在這里用了 2 位 10 進制。
求補數的演算法:補數 = 負數 + 10^n。
n 是位數。
-----------------------
計算機用二進制,補數,就改名為:補碼。
一個位元組,是 8 位 2 進制。
計數范圍仿敬是:0000 0000 ~ 1111 1111(十進制 255)。
計數周期是:2^8 = 256。
求補碼的演算法:負數的補碼=負數+2^n。
那麼:
-1 的補碼=-1 + 256 = 255 = 1111 1111。
-2 的補碼=-2 + 256 = 254 = 1111 1110。
。。。
例如,7-2 = 5,用補碼計算如下:
7 =0000 0111
[-2] 補 =1111 1110
---相加------------
得:(1)0000 0101 = 5
舍棄進位,結果笑寬就完全正確。
藉助於補碼,計算機中,就不存在負數了,從而就把減法轉換為加法運算。
-------碰大亮----------------
補碼的來源,與原碼反碼毫無關系。
「取反加一、符號位也能參加運算」,這些,都沒有什麼理論依據。
通過原碼反碼,已經證明「符號位能參加運算」是錯誤的。
補碼,它就是一個正數,什麼符號位也沒有。
補碼的全部位,都是代表數據的,當然就都可以參加運算。
4. 計算機中的負數為什麼用補碼存儲
計算機中的負數是為了方便運算,所以計算機才會採用補碼存儲數據。補碼是計算機方便加法睜檔運算的編碼。例如100(10進制)100/16=6餘46/16=0餘6。所以100的16進制數是64H以8位二進制來說64H=01100100B正數的補碼和原碼相同。
所以100的補碼還是01100100。
另假設還有個數是-109109的16進制,是01101101-109的原碼,就是11101101(首位是符號位)-109的反碼,就是10010010(除了符號位其悉塵亂他各位分別取反)。109的補碼就是10010011(反碼加1)。現在運算100-109=100+(-109)。01100100+10010011=11110111這個結果就是-9的補碼。如果換成其他編碼運算就不會這么簡單了。
例如原碼相加的話存兄仿在符號位進位的問題等等。對於計算機而言。數值的計算補碼是最方便的。
5. 二進制中的負數在計算機的儲存方式
二進制的儲存中都是用的補碼,正數的原碼、反碼和補碼相同,負數的原碼是最高位為1,反碼最高位不變,其餘各位取反,補碼為其反碼+1。比如說:-1的原碼是10000001(省略幾個零),反碼是11111110,補碼就是11111111。~_~我現在C語言學得很好的哦,問我就不會錯了。
6. 二進制的負數都是補碼
1、在計算機薯磨孝系統中,數值一律用補碼來表示(存儲).
主要原因:使用補碼,可以將符號位和其它位統一處理;同時,減法也可按加法來處理.另外,兩個用補
碼表示的數相加時,如果最高位(符號位)有進位,則進位被舍棄.
2、補碼與原碼的轉換過程幾乎是相同的.
數值的補碼表示也分兩種情況:
(1)正數的補碼:與原碼相同.
例如,+9的補碼游顫是00001001.
(2)負數的補碼:符號位為1,其餘位為該數絕對值的原碼按位取反;然後整個數加1.
例如,-7的補碼:因為是負數,則符號位為「1」,整個為10000111;其餘數稿7位為-7的絕對值+7的原碼
0000111按位取反為1111000;再加1,所以-7的補碼是11111001.