爲什麼一個byte表示的數的範圍是 -128 ~ 127

        計算機中帶符號的整數都是用的二進制的補碼,這點我們需要明確。那爲什麼計算機存儲要用補碼而不直接用原碼,其實就是爲了計算機自己方便運算,後面會介紹。

計算機中表示-128 ~ 127的格式如下:

0000 0000       0

0000 0001       1

   ……     ……

0111 1111        127

1000 0000      -128

1000 0001      -127

……        ……

1111 1111       -1

上面的二進制都是補碼,它們是在計算機中的表示形式。

因爲最高位是符號位,0表示正數,1表示負數

正數的補碼和原碼,反碼相同,所以我們會很容易的知道 0111 1111 是127

那負數呢

比如1111 1111爲什麼是-1而不是-127

我們知道1111 1111 是補碼,如果我們想要知道它的真實身份,就需要求它的原碼

1111 1111 減 1得到反碼 1111 1110  反碼除了符號位 其餘按位取反 得到1000 0001 現在我們就知道原來它的真實身份是-1

這裏有一個特殊情況就是 1000 0000 爲什麼是-128 我們會發現求它的原碼好像不好求 會出現錯誤 其實我們可以反證得到其實1000 0000  的補碼和原碼是一樣的 

這裏就會有人問1000 0000 不是表示 -0 嗎?也許你是對的,但是我們已經有0000 0000 表示0 了 ,0的正負其實是沒有意義的,所以我們就無須弄兩個0出來,所以1000 0000 的最高位既是符號位也是數值位 表示 -128, 這是個特殊。

其實一個字節表示的數是256個 而-128 ~ 127 剛好是256個 說到這裏大家有沒有理解呢?

現在我們再說說爲什麼計算機要用補碼錶示一個數,我們舉個例子

如果計算機用原碼錶示數據 則 -1 = 1000 0001        1 = 0000 0001

-1 + 1 = 1000 0001 + 0000 0001 = 1000 0010 = -2  ??? 不是等於0 嗎,怎麼會是-2 ,這就是計算機用原碼錶示時進行加減運算出的錯誤

我們再看看補碼的形式  -1 = 1111 1111   1 = 0000 0001

-1 + 1 = 11111111 + 0000 0001 = 0000 0000 =0 我們可以看到結果是正確的

我們再舉個例子 如果計算機用原碼錶示數據  1 = 0000 0001   -2= 1000 0010

1 + (-2)= 0000 0001 + 1000 0010 = 1000 0011 = -3  這顯然是錯的

如果計算機用補碼錶示數據 1 = 0000 0001  -2 = 1111 1110

1 + (-2)= 0000 0001 + 1111 1110 = 1111 1111  = -1

我們知道1111 1111它其實是補碼,它表示的就是 -1

寫到這裏大家應該已經大致明白我的意思了,當然還有一些比較特殊的情況需要大家自己琢磨,而且由於自己水平有限,可能有些不正確的說法,還需要大家指出批評。

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