Integer.MAX_VALUE =2147483647
此值是2的31次方-1 為什么使用這個(gè)值
思路如下:
cpu只認(rèn)識(shí)高低電平 高電平記為1 低電平記為0 這很容易讓我們對(duì)應(yīng)到二進(jìn)制,二進(jìn)
制又可以和十進(jìn)
制的數(shù)字進(jìn)行轉(zhuǎn)換
因此也可以看成cpu認(rèn)識(shí)的是一堆十進(jìn)制的數(shù)字
二進(jìn)制和十進(jìn)制的例子如下
比如(首位為正負(fù)數(shù)標(biāo)志位,0代表正數(shù) 1代表負(fù)數(shù))
00 -- 0
01 -- 1 (2的1次方-1)
010 -- 2
011 -- 3 (2的2次方-1)
0111 --7 (2的3次方-1)
.
.
.
011111..... --2147483647 (2的31次方-1)
如上規(guī)律可以看出n位帶符號(hào)二進(jìn)制數(shù)能表示的最大的十進(jìn)制值為:2的(n-1)次方-1
為什么是2的(n-1)?,因?yàn)槎M(jìn)制首位是符號(hào)位
為啥是2的(n-1)次方-1?看上面的結(jié)論即可
這么多的數(shù)字在交流時(shí)不好量化右犹,因此出現(xiàn)了承載這些數(shù)字(數(shù)據(jù))的單位,也叫數(shù)據(jù)類型
java語(yǔ)言中人們給二進(jìn)制訂制了很多單位來(lái)描述它的大小 從小到大依次記為bit -- byte -- short -- int --long
規(guī)定:
一個(gè)二進(jìn)制位為 1位 記為1bit
8bit(位)=1byte(字節(jié))
16bit =1short(短整型)
32bit =1int(整型)
64bit =1long(長(zhǎng)整型)
這里規(guī)定了32bit等于一個(gè)整型單位
根據(jù)2的(n-1)次方-1這個(gè)公式,32bit 的取值范圍為 -2147483648(-(2的31次方)) 到 2147483647(2的31次方-1)
因此Integer.MAX_VALUE的最大值為2147483647。
本來(lái)問題到這已經(jīng)結(jié)束了,答案就是簡(jiǎn)單的規(guī)定而已,那么下面我們來(lái)想想人們?yōu)槭裁催@么規(guī)定4字節(jié)代表int類型,或者直接把題目中Integer.MAX_VALUE換成為什么最大為4個(gè)字節(jié)
所有的起源還得從cpu說(shuō)起:
我們都知道現(xiàn)階段常用cpu都是32位和64位的勋功,cpu的不同型號(hào)決定了cpu一次性讀入數(shù)據(jù)的大小是多少
比如32位cpu一次性可讀取的數(shù)據(jù)大小是32位 也就是4個(gè)字節(jié)弓候,64位cpu一次性可讀取的數(shù)據(jù)大小是64位,也就是8字節(jié)
將整數(shù)定義為4個(gè)字節(jié)可以讓cpu一次性讀的既不浪費(fèi) 也不用分多次讀入 效率較高(這里可以聯(lián)想下socket編程中的緩沖區(qū)大小如何設(shè)置或者讀取大文件時(shí)byte[]數(shù)組的大小設(shè)置)
還可以適配64位的cpu 不用不同cpu寫不同的代碼
下面我們看看為什么你問的是Int的范圍而不是其他類型的范圍
各個(gè)數(shù)據(jù)類型的取值范圍如下:
byte的取值范圍是-128到127(2的8次方-1) 占1個(gè)字節(jié)
short的取值范圍是-32768到32767(2的16次方-1) 占2個(gè)字節(jié)
int的取值范圍是-2147483648到2147483647(2的32次方-1) 占4個(gè)字節(jié)
long的取值范圍是-9223372036854774808到9223372036854774807(2的32次方-1) 占8個(gè)字節(jié)
前兩者太小,最后者又過(guò)大,剛好int可以概括現(xiàn)在用的大多數(shù)場(chǎng)景,因此大多數(shù)提問問的是int的長(zhǎng)度~
后續(xù):
數(shù)字對(duì)人的識(shí)別度太低了,人們更愿意認(rèn)識(shí)abc來(lái)代替一串二進(jìn)制數(shù)或者十進(jìn)制數(shù),比如你可以自創(chuàng)的把0111 --對(duì)應(yīng)'吃飯' 把0000 0001 --對(duì)應(yīng)'a',
假如你這套東西用的人多了藏斩,
這個(gè)訂制就是一個(gè)標(biāo)準(zhǔn)
因此那個(gè)時(shí)代計(jì)算機(jī)界大佬們創(chuàng)造了ascii碼
49(00110001)來(lái)表示字符1
用97(01100001)來(lái)表示字母a
ascii碼是給人看的躏结,放到cpu中 仍然是一堆數(shù)字,可以debug下java代碼 看看一個(gè)字符串在內(nèi)存中的含義