java byte數值范圍 -128-127

話不多說,直接進入正題

byte i =127;System.out.println(++i);   //很意外的會輸出 -128

推測代碼執(zhí)行的結果,分析結果產生的原因。

答:
先看計算機二進制拓展:

在計算機內,定點數有3種表示法:原碼、反碼和補碼
[原碼]就是二進制定點表示法,即最高位為符號位,“0”表示正,“1”表示負,其余位表示數值的大小。
[反碼]表示法規(guī)定:正數的反碼與其原碼相同;負數的反碼是對其原碼逐位取反,但符號位除外。
[補碼]表示法規(guī)定:正數的補碼與其原碼相同;負數的補碼是在其反碼的末位加1。

也就是說:
- 正數的補碼就是其本身。
- 負數的補碼是在其原碼的基礎上, 符號位不變, 其余各位取反, 最后+1. (即在反碼的基礎上+1)

[+1] = [00000001]原 = [00000001]反 = [00000001]補

[-1] = [10000001]原 = [11111110]反 = [11111111]補

對于負數, 補碼表示方式也是人腦無法直觀看出其數值的. 通常也需要轉換成原碼在計算其數值.

正數:
(p)正數的反碼和補碼都與原碼相同

負數:
(p)負數的反碼、補碼與原碼不同,負數的反碼:原碼中除去符號位,
其他的數值位取反,0變1,1變0。負數的補碼:反碼+1
正題:基本數據類型 byte:  1 byte = 1字節(jié)  = 8bit (位)
最高位是符號位。
即最大值是01111111(十進制表示形式為127),即此正數為01111111。
那最小值相反就是負數, 負數的符號位是1 , 即 10000000(-128)。
01111111+1 = 10000000
image.png
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容