記得某次面試中竿奏,面試官讓我寫(xiě)個(gè)代碼段:
? ??????將兩個(gè)長(zhǎng)度為n的字符串相加,其中字符串為純數(shù)字腥放,求結(jié)果泛啸?
哦呵,面試官的意圖非常明顯秃症,無(wú)非是想考察下面試者對(duì)于數(shù)據(jù)類(lèi)型取值范圍的掌握候址、數(shù)據(jù)溢出的處理。
em...是的...但是...种柑,我忘了 =.=I|..岗仑,int的取值范圍?這個(gè)取值范圍是怎么來(lái)的聚请?數(shù)據(jù)溢出會(huì)變成什么樣赔蒲?......,再見(jiàn)了良漱,青春舞虱。
一、基本數(shù)據(jù)類(lèi)型
? ? ? ?數(shù)據(jù)類(lèi)型在計(jì)算機(jī)語(yǔ)言里面母市,是對(duì)內(nèi)存位置的一個(gè)抽象表達(dá)方式矾兜,是語(yǔ)言的抽象原子概念,可以說(shuō)是語(yǔ)言中最基本的單元定義患久。java是強(qiáng)類(lèi)型語(yǔ)言椅寺,本質(zhì)上可將數(shù)據(jù)類(lèi)型分為兩種:基本類(lèi)型和引用數(shù)據(jù)類(lèi)型。
基本類(lèi)型:簡(jiǎn)單數(shù)據(jù)類(lèi)型是不能簡(jiǎn)化的蒋失、內(nèi)置的數(shù)據(jù)類(lèi)型返帕、由編程語(yǔ)言本身定義,它表示了真實(shí)的數(shù)字篙挽、字符和整數(shù)荆萤。
二、取值范圍的由來(lái)
以short短整型為例,short類(lèi)型占2個(gè)字節(jié)链韭,即16位偏竟。
1、16位二進(jìn)制可表示的范圍為:
????????????????0000,0000,0000,0000 ~ 1111,1111,1111,1111(0 ~ 2^16-1)
2敞峭、java中整數(shù)類(lèi)型的數(shù)據(jù)在保存為二進(jìn)制時(shí)踊谋,都定義了符號(hào)位,最高位(第一位)表示符號(hào):0表示正旋讹,1表示負(fù)殖蚕。即16位二進(jìn)制數(shù)可表示的范圍為:
? ? ? ? ? ? ? ? ?0111,1111,1111,1111 ~ 1111,1111,1111,1111(2^15-1 ~ -2^15-1)
3、
問(wèn):在不同位數(shù)的操作系統(tǒng)上沉迹,基本數(shù)據(jù)類(lèi)型所表示的范圍是否相同嫌褪?
答:在C/C++上是不同的,但是在java上是相同的胚股。(具體不深究)
三、數(shù)據(jù)溢出