原碼,補碼,反碼

一個數在計算機中是以二進制數表示形式存在的,  這個二進制數稱爲機器數,其值稱爲真值。

符號數和無符號數是針對符號出現的兩種機器數表示方法。同一個二進制數,作爲符號數和無符號數其真值是不同的(這裏只關

注有符號數)。符號數如:    char, short ,int, long等類型的變量。

定點數和浮點數是針對小數點出現的兩種機器數表示方法。浮點數如:double,float

 

在計算機內,有符號數有3種表示法:原碼、反碼和補碼。只有符號數纔有原碼, 反碼, 補碼

(1)原碼

         A:所謂原碼就是二進制數的有符號表示法,即最高位爲符號位,

                  “0”表示正,“1”表示負,其餘位表示數值的大小。  以byte類型的8字節二進制舉例         

                   舉例:               符號位               數值位

                    +7                        0                     0000111

                    -7                         1                     0000111

         B:原碼不能直接參加運算,可能會出錯。例如數學上,1+(-1)=0,而在二進制中原碼

                   00000001+10000001=10000010,換算成十進制爲-2。顯然出錯了。

(2)反碼

A:正數 與原碼相同

                   B:負數 符號位不變,數值位按位取反,0變1,1變0。

                   舉例:               符號位               數值位

                            +7               0                     0000111

                            -7                1                     1111000

 

(3)補碼

在計算機中,數值一律用補碼來表示(存儲)

主要原因:使用補碼,可以將符號位和其它位統一處理;同時,減法也可按加法來處理。另外,兩個用補碼錶示的數相加時,如

果最高位(符號位)有進位,則進位被捨棄。

A:正數 與原碼相同

B:負數 反碼加1。

                   舉例:               符號位               數值位

                     +7                        0                   0000111

                     -7                        1                    1111001

聯繫到byte類型的數據表數範圍是[-128, 127],而不是最大值11111111=127,最小值01111111=-127,那麼-128是怎麼表示的呢

-128沒有原碼反碼,其實是[00000000]表示正0,而0是無符號的,負0即10000000實際上就是表示的-128,它的得來方式:

(-1) + (-127) = [1000 0001]原 + [1111 1111]原 = [1111 1111]補 + [1000 0001]補 = [1000 0000]補

  -1-127的結果應該是-128, 在用補碼運算的結果中, [1000 0000]補 就是-128. 但是注意因爲實際上是使用以前的-0的補碼來表

示-128, 所以-128並沒有原碼和反碼錶示.(對-128的補碼錶示[1000 0000]補算出來的原碼是[0000 0000]原, 這是不正確的)。

使用補碼, 不僅僅修復了0的符號以及存在兩個編碼的問題, 而且還能夠多表示一個最低數. 這就是爲什麼8字節二進制, 使用原碼或

反碼錶示的範圍爲[-127, +127], 而使用補碼錶示的範圍爲[-128, 127]。

對於正數,原碼補碼反碼都是一致的。負數的比較麻煩一些

Integer,Long等這些包裝類中,提供了

* Integer.toBinaryString(i)方法:

* 返回將該值轉換爲二進制補碼形式的無前導 0的 ASCII 數字字符串,

* 例 7 ---> 111 ,-7 ---> 11...1001(中間28個1)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章