計算思路有很多更高級的秸谢,我這里說一種最死板的思路凛澎。
首先我們知道,Java中int占4個字節(jié)估蹄,也就是32位塑煎。32位是什么概念?直接看下面對應(yīng)關(guān)系臭蚁,簡單粗暴最铁,前提你要知道最高位是標(biāo)志位,0為正數(shù)
垮兑,1為負(fù)數(shù)
:
max = 01111111 11111111 11111111 11111111
...
4 = 00000000 00000000 00000000 00000100
3 = 00000000 00000000 00000000 00000011
2 = 00000000 00000000 00000000 00000010
1 = 00000000 00000000 00000000 00000001
0 = 00000000 00000000 00000000 00000000
-1 = 11111111 11111111 11111111 11111111
-2 = 11111111 11111111 11111111 11111110
-3 = 11111111 11111111 11111111 11111101
-4 = 11111111 11111111 11111111 11111100
...
min = 10000000 00000000 00000000 00000000
由上面我們可以知道int的取值范圍就是 [10000000 00000000 00000000 00000000 , 01111111 11111111 11111111 11111111]
冷尉,
01111111 11111111 11111111 11111111轉(zhuǎn)成十進制容易算,就是2的31次方減1系枪,所以max=21474836487
雀哨。
那么10000000 00000000 00000000 00000000轉(zhuǎn)成十進制是多少呢?先了解一下負(fù)數(shù)的十進制和二進制的轉(zhuǎn)換私爷。
負(fù)數(shù)十進制轉(zhuǎn)二進制 - 取反加1
取反加1雾棺,很簡單,比如-666
轉(zhuǎn)成二進制衬浑,就是11111111 11111111 11111101 01100110
捌浩,如下:
// 首先正數(shù)666的二進制是
00000000 00000000 00000010 10011010
// 取反
11111111 11111111 11111101 01100101
// 加1
11111111 11111111 11111101 01100110
負(fù)數(shù)二進制轉(zhuǎn)十進制 - 減1取反
減1取反,也很簡單嚎卫,比如11111111 11111111 11111100 10001000
轉(zhuǎn)成十進制嘉栓,就是-888
宏榕,如下:
// 二進制原數(shù)
11111111 11111111 11111100 10001000
// 減1
11111111 11111111 11111100 10000111
// 取反
00000000 00000000 00000011 01111000
// 轉(zhuǎn)成十進制
888
那么原來的問題拓诸,10000000 00000000 00000000 00000000是多少呢
// 原負(fù)數(shù)
10000000 00000000 00000000 00000000
// 減1
01111111 11111111 11111111 11111111
// 取反
10000000 00000000 00000000 00000000
// 轉(zhuǎn)成十進制
2147483648
所以10000000 00000000 00000000 00000000=-2147483648,
所以min=-2147483648
麻昼,前面已經(jīng)算出max=21474836487
所以int的取值范圍就是[-2147483648,21474836487]
碴犬,也就是-2的31次方 到 2的31次方減1
问潭。