原文:https://www.jb51.net/article/34133.htm.net
--------------------------------------------------------htm
1.十進制負數轉二進制源碼
假設有一個int類型的數,值爲5,那麼,咱們知道它在計算機中表示爲:(由於Java中int是4個字節。二進制
因此高位須要補0,佔夠32位)計算機
00000000 00000000 00000000 00000101證書
如今想知道,-5在計算機中如何表示?數字
在計算機中,負數以原碼的補碼形式表達。ps
什麼是補碼呢?這得從原碼,反碼提及。
原碼:一個正數,按照絕對值大小轉換成的二進制數;一個負數按照絕對值的大小轉換成的二進制數,
而後最高位補1,稱爲源碼。
好比 00000000 00000000 00000000 00000101 是5的源碼;
10000000 00000000 00000000 00000101是-5的源碼。
反碼:正數的反碼與源碼相同,負數的反碼爲對該數的源碼除符號位外各位取反。
取反操做指:原爲1,得0;原爲0,得1.(1變0;0變1)
好比:正數000000000 00000000 00000000 00000101 的反碼仍是
000000000 00000000 00000000 00000101;
負數10000000 00000000 00000000 00000101每一位取反(除符號位),得
11111111 11111111 11111111 11111010。
稱:10000000 00000000 00000000 00000101和11111111 11111111 11111111 11111010互爲反碼。
補碼:正數的補碼與源碼相同,負數的補碼爲對該數源碼除符號位外各位取反,而後在最後一位加1.
好比:10000000 00000000 00000000 00000101 的反碼是:11111111 11111111 11111111 11111010.
那麼補碼爲:
11111111 11111111 11111111 11111010 + 1 = 11111111 11111111 11111111 11111011
因此,-5 在計算機中表達爲:11111111 11111111 11111111 11111011。轉換爲十六進制:0xFFFFFFFB。、
==============================================================================
再舉一例子,咱們來看整數-1在計算機中如何表示.
假設這也是一個int類型,那麼:
1 先取-1的源碼:10000000 00000000 00000000 00000001
2 得反碼: 11111111 11111111 11111111 11111110 (除符號位按位取反)
3 得補碼: 11111111 11111111 11111111 11111111
可見,-1在計算機裏用二進制表達就全是1.16進製爲:0xFFFFFF
===============================================================================
主要知識點:
①正數的反碼和補碼都與原碼相同。
②而負數的反碼爲對該數的原碼除符號位外各位取反。
③負數的補碼爲對該數的原碼除符號位外各位取反,而後在最後一位加1
================================================================
下面是書上原文:
1)源碼錶示法規定:
用符號位和數值表示帶符號數,正數的符號位用「0」表示,負數的符號位用
「1」表示,數字部分用二進制形式表示。
2)反碼錶示法規定:證書的反碼與源碼相同,負數的反碼與該數的源碼除符號位外各位取反。
3)補碼錶示法規定:證書的補碼與源碼相同,負數的補碼爲對該數的源碼除符號位外各位取反,
而後在最後一位加1.
4)正0和負0的補碼相同,[+0]補=[-0]補=0000 0000B。
2.符號位爲1的二進制<即補碼>轉十進制負數
相信你們已經知道如何個轉法了,不過在此仍是說明一下。
1)除去符號位減1.
2)除去符號位,按位取反;結果就是負數的源碼;
3)源碼轉成相應的十進制。
例如:
-5在計算機中表達<-5的補碼>:
11111111 11111111 11111111 11111011
1>除去符號位減1: 11111111 11111111 11111111 11111010
2>除去符號位,按位取反<負數的源碼>: 10000000 00000000 00000000 00000101
3>源碼轉換成十進制數結果: - 5
-------由於最高位爲1因此帶負號