記得某次面試中,面試官讓我寫(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ù)溢出