整數數據類型的取值范圍
我們都知道計算機的底層是二進制,也知道不同的整數類型存儲值的范圍不同,可這些數值在計算機底層是怎樣存儲的呢?數值范圍又是怎么計算出來的呢?
下面以java來進行舉例:
byte 1個字節 (8bit) -2^7~2^7-1
short 2個字節 (16bit) -2^16~2^16-1
int 4個字節 (32bit) -2^31~2^31-1
long 8個字節 (64bit) -2^63~2^63-1
整數數據類型其中最高位是符號位,用來表示正數或負數。其中0用來表示正數,1用來表示負數。
那么,剩下的位就是數值位,用來表示數值大小的。
那么byte的可用范圍就是7位了:
從 000 0000 ~ 111 1111 轉換成十進制也就是從 0 ~ 127
如果加上符號位呢?
1111 1111 ~ 0111 1111 轉換成十進制是從 -127 ~ 127
可是如果我們的 111 1111 還能再進一位呢?
那不就是變成 1000 0000了嗎,那這個數到底是用來表示-128還是128呢?
因為符號位的存在,如果讓它來表示128的話,就亂套了,所以我們就規定只用它來表示正的128。
所以一個字節能表示的最大范圍是從 -2^7 ~ 2^7-1 ps:2^7是128
無符號類型的取值范圍(char)
Java中的char類型是用兩個字節來表示,使用的是Unicode編碼,所以可以正常表示中文字符。
兩個字節一共十六位,又因為沒有符號位,都是數值位的原因,所以表值范圍是從:
0000 0000 0000 0000 ~ 1111 1111 1111 1111 1111 1111 (65535)
所以char類型的表值范圍是從 0 ~ 2^16-1