java數(shù)據(jù)類型的取值范圍
一、 取值范圍
我們在講解8種基本類型時,大家會發(fā)現(xiàn),不同的類型大小不同,也就是它們有不同的取值范圍。接下來給大家總結(jié)一下這幾種不同類型的取值范圍。
二、 原理剖析
有的初學(xué)者可能不理解,為什么不同數(shù)據(jù)類型的取值范圍大小不一樣?比如同樣都是整數(shù),為什么有的范圍大有的范圍小?壹哥簡單給大家舉個例子。計(jì)算機(jī)的每個內(nèi)存單元,都有自己的內(nèi)存地址,一般都是從0開始編號。而每個內(nèi)存單元都可以看作是一個房間,房間有大有小,并且房間的類型不同,有的是大床房,有的是標(biāo)間,有的是總統(tǒng)套房。另外內(nèi)存地址就是房間的門牌號,方便我們找到對應(yīng)的房間。
不同的數(shù)據(jù)類型之所以取值范圍不同,就好比每種類型都是不同的房型,有大有小,如下圖所示:
這些不同的類型,占用的字節(jié)大小不同,所以取值范圍自然也不一樣。這個時候就有人發(fā)出疑問了:byte類型取值范圍為什么是127到-128?
首先,需要理解byte類型是一種8位二進(jìn)制補(bǔ)碼整數(shù)數(shù)據(jù)類型,它可以表示的整數(shù)范圍為-128到127。為了更好地理解這個范圍,可以將byte類型的二進(jìn)制表示方式進(jìn)行分析和繪制。在byte類型中,最高位為符號位,表示正數(shù)或負(fù)數(shù)。當(dāng)最高位為0時,表示一個正數(shù),當(dāng)最高位為1時,表示一個負(fù)數(shù)。
對于正數(shù),byte類型使用無符號二進(jìn)制表示,最高位為0,其余位表示數(shù)值大小。例如,十進(jìn)制數(shù)10的二進(jìn)制表示為00001010,因?yàn)樗且粋€正數(shù)。對于負(fù)數(shù),byte類型使用補(bǔ)碼二進(jìn)制表示,需要先將其絕對值取反,然后加1。例如,十進(jìn)制數(shù)-10的二進(jìn)制表示為11110110,這個值是通過將絕對值10的二進(jìn)制表示00001010取反得到的,然后再加1得到的。
因此,byte類型的取值范圍為從-128到127,如下圖所示:
注意:這里的最高位是符號位,表示正數(shù)或負(fù)數(shù),所以當(dāng)最高位為1時,表示負(fù)數(shù),其余位的值需要按位取反再加1才能得到該負(fù)數(shù)的絕對值。
那么現(xiàn)在大家明白了嗎?