1. 程式人生 > >關於Java中Byte型別的取值範圍是-128~127的理解

關於Java中Byte型別的取值範圍是-128~127的理解

學習C語言的時候對int類型範圍理解得不透徹,所以通過網上查詢資料,結合大牛的講解分析了一下byte型別的範圍,希望可以幫到大家。

1、知識理解

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

[原碼]二進位制定點表示法,即最高位為符號位,“0”表示正,“1”表示負,其餘位表示數值的大小。 

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

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

計算機資料是用補碼錶示的,正數的補碼就是它的原碼,而負數的補碼是將其原碼(取絕對值後的原碼)取反加1得到的。

2、理解方式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、理解方式2

0 00000000 

1 00000001
…….
127 01111111
----------------
正數(包括0)共 128 個 

-1 11111111
-2 11111110
……
-128 10000000 
---------------- 
負數共 128 
我們都知道byte佔8位。而2的8次方等於256,也就是byte最多可以表示256個不同的數,

0~127:128個
-0~127:128個
但是這裡0與-0表示一樣的數了,所以就用-0的二進位制補碼錶示到-128裡面去了(這裡是關鍵,也就是說-0的補碼用來表示-128了,根據理解方式1中的第五步,-0的補碼"10000000"通過逆向計算剛好得到-128這個值)