在java中,long和double表示的是2種不同的基本資料型別,long可以說是int的擴充套件,double是float的擴充套件。
那麼,為什麼long和double佔用記憶體空間相同,而資料表示的範圍卻不同呢?
1、Long:整型,8位元組(64bit)
儲存形式:第一位表符號位(1表示負數,0表示正數),後面的表值
例如:(宣告一個long,如:long long1 = 1L )下面預設64位作業系統,採用補碼
如下圖所示,可以看出long在記憶體中的二進位制
它的取值範圍為:[-9223372036854775808, 9223372036854775807] = [-2^63, 2^63 - 1]
2、Double:雙精度浮點型,8位元組(64bit)
但是同樣的64bit,儲存方式卻不一樣,如下表:
儲存形式:第1位符號位,2-12位表階碼位,13-64位表小數位
值範圍:[4.9E-324, 1.7976931348623157E308]
其中,double型與二進位制型的互相轉化,大家可以思考下,如何進行轉換?(以前大學的時候學過,忘記咋轉了都)
在java中,long和double表示的是2種不同的基本資料型別,long可以說是int的擴充套件,double是float的擴充套件。
那麼,為什麼long和double佔用記憶體空間相同,而資料表示的範圍卻不同呢?
2種不同的儲存方式1、Long:整型,8位元組(64bit)
儲存形式:第一位表符號位(1表示負數,0表示正數),後面的表值
例如:(宣告一個long,如:long long1 = 1L )下面預設64位作業系統,採用補碼
如下圖所示,可以看出long在記憶體中的二進位制
它的取值範圍為:[-9223372036854775808, 9223372036854775807] = [-2^63, 2^63 - 1]
2、Double:雙精度浮點型,8位元組(64bit)
但是同樣的64bit,儲存方式卻不一樣,如下表:
儲存形式:第1位符號位,2-12位表階碼位,13-64位表小數位
值範圍:[4.9E-324, 1.7976931348623157E308]
其中,double型與二進位制型的互相轉化,大家可以思考下,如何進行轉換?(以前大學的時候學過,忘記咋轉了都)