java中,int為4字節,long為8字節,short為2字節,byte為1字節。java沒有無符號類型(unsigned),所以各個整型能表示的最大整數大約是該類型能表示的數量的一半。
例如byte占1字節,二進制表示為00000000-11111111,共計256個狀態,除去最高位表示的符號位,則0000000-1111111(7位)能表示出128個狀態,是256的一半,0之外,是127個正數,其余128個數值均為負數。
因此,
byte類型的取值范圍是:-128 ~ 127;
short類型的取值范圍是:-32 768 ~ 32 767;
int類型的取值范圍是:-2 147 483 648 ~ 2 147 483 647(20億)
long類型的取值范圍是:-9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807。
概念:java中用補碼表示二進制數,補碼的最高位是符號位,最高位為“0”表示正數,最高位為“1”表示負數。
正數補碼為其本身;
負數補碼為其絕對值各位取反加1;
例如:
+21,其二進制表示形式是00010101,則其補碼同樣為00010101
-21,按照概念其絕對值為00010101,各位取反為11101010,再加1為11101011,即-21的二進制表示形式為11101011
步驟:
1、byte為一字節8位,最高位是符號位,即最大值是01111111,因正數的補碼是其本身,即此正數為01111111
十進制表示形式為127
2、最大正數是01111111,那么最小負是10000000(最大的負數是11111111,即-1)
3、10000000是最小負數的補碼表示形式,我們把補碼計算步驟倒過來就即可。10000000減1得01111111然后取反10000000
因為負數的補碼是其絕對值取反,即10000000為最小負數的絕對值,而10000000的十進制表示是128,所以最小負數是-128
4、由此可以得出byte的取值范圍是-128到+127
5、說明:各個類型取值范圍的計算方法與此大致相同,感興趣的同學可以自己試着計算
補充(給非計算機專業的同學掃下盲):
在計算機內,定點數有3種表示法:原碼、反碼和補碼
[原碼]就是二進制定點表示法,即最高位為符號位,“0”表示正,“1”表示負,其余位表示數值的大小。
[反碼]表示法規定:正數的反碼與其原碼相同;負數的反碼是對其原碼逐位取反,但符號位除外。
[補碼]表示法規定:正數的補碼與其原碼相同;負數的補碼是在其反碼的末位加1。