爲什麼Java byte 類型的取值範圍是-128~127

概念:負數的補碼是該 數 絕 對 值 的 原 碼 按 位 取 反 ,然 後 對 整個數 加 1

步驟:

1.確定byte是1個字節,也就是8位
2.最大的應該是0111 1111,因爲第一位是符號位,0表示正數
3.最小的應該是1000 0000,同理,表示負數最小的(1111 1111是最大的負數-1)
4.0111 1111即127
5.1000 0000按照最下面的解釋爲先減一,得到0111 1111,然後按位取反得到1000 0000,該結果爲欲求負數的絕對值,所以結果是-128(和概念反着來求出該負數)

=========================================================

在計算機內,定點數有3種表示法:原碼、反碼和補碼

[原碼]就是前面所介紹的二進制定點表示法,即最高位爲符號位,“0”表示正,“1”表示負,其餘位表示數值的大小。

[反碼]表示法規定:正數的反碼與其原碼相同;負數的反碼是對其原碼逐位取反,但符號位除外。

[補碼]表示法規定:正數的補碼與其原碼相同;負數的補碼是在其反碼的末位加1。

====================================================

補 碼

Java使 用 補 碼 來 表 示 二 進 制 數 ,在 補 碼 表 示 中 ,最 高 位 爲符號 位 ,正 數 的 符 號 位 爲 0,負 數 爲 1。 補 碼 的 規 定 如 下 :

對 正 數 來 說 ,最 高 位 爲 0,其 餘 各 位 代 表 數 值 本 身 (以 二 進製表 示 ),如 +42的補 碼 爲 00101010。

對 負 數 而 言 ,把 該 數 絕 對 值 的 補 碼 按 位 取 反 ,然 後 對 整個數 加 1,即 得 該 數的 補 碼 。 如 -42的 補 碼 爲 11010110 (00101010 按位 取 反 11010101 +1=11010110 )

用 補 碼 來 表 示 數 ,0的 補 碼 是 唯 一 的 ,都 爲 00000000。 (而 在原碼 ,反 碼 表 示中 ,+0和 -0的 表 示 是 不 唯 一 的 ,可 參 見 相 應 的書 籍 )。 而 且 可 以用 111111表 示 -1的 補 碼 (這 也 是 補 碼 與 原 碼和 反 碼 的 區 別 )。

正數=原碼8
負數 = 反碼+1

衍生問題:8位二進制帶符號補碼的最小值爲什麼是10000000?

改爲補碼後只有一個0值了,即0000 0000。
8位二進制能表示的數的總個數沒有變,而補碼正數的表示方法較原碼沒有發生改變。所以原碼裏的另一個0值的數的位置給了負數,所以補碼的負數就比原碼的多了一個。
也就是說補碼的最小值比原碼的最小值還要小1,所以你當然不能用原碼的最小值轉換得到補碼最小值咯。

你可以將1000 0000(補)轉換爲原碼驗證一下。

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