JAVA基本資料類型範圍和float、double精度問題
1.八中資料型別的分類如下:
第一類:整型 byte short int long
第二類:浮點型 float double
第三類:邏輯型 boolean(它只有兩個值可取true false)
第四類:字元型 char
2.各種基本資料型別所佔的位元組:
boolean 布林型 1/8byte 位元組型別 1
char 字元型 2 一個字元能儲存一箇中文漢字
short 短整型 2
int 整數型別 4
float 浮點型別(單精度) 4
long 長整形 8
double 雙精度型別(雙精度) 8
3.整型各基本資料型別的取值範圍:
因為1byte = 8Byte ,(例如將3byte轉化為二進位制為:0000 0011 ,切記第一位為符號位,即0代表+,1代表-,剩下的七位是資料位)
所以byte取值範圍是:-2^7~2^7-1,即:-128~127(因為0也包括在內,所以在正數範圍是2^7-1)
同理short取值範圍:-2^15~2^15-1
int取值範圍:-2^31~2^31-1
long取值範圍:-2^63~2^63-1
4.float和double取值範圍和精度問題:
float和double的範圍是由指數的位數來決定的。float的指數位有8位,而double的指數位有11位,分佈如下:
float:
1bit(符號位)
8bits(指數位)
23bits(尾數位)
double:
1bit(符號位)
11bits(指數位)
52bits(尾數位)
範圍問題:
float的指數範圍為-2^7~2^7-1(即-128~127),而double的指數範圍為-2^10~2^10-1(即-1024~1023),並且指數位是補碼的形式來劃分的。其
中負指數決定了浮點數所能表達的絕對值最小的數;而正指數決定了浮點數所能表達的絕對值最大的數,也即決定了浮點數的取值範圍。
float的範圍為-2^128 ~ +2^127
double的範圍為-2^1024 ~ +2^1023
精度問題:
float和double的精度是由尾數的位數來決定的。浮點數在記憶體中是按科學計數法來儲存的,其整數部分始終是一個隱含著的“1”,由於它是不變的
,故不能對精度造成影響
float:2^23 = 8388608,一共七位,這意味著最多能有7位有效數字,但絕對能保證的為6位,也即float的精度為6~7位有效數字;
double:2^52 = 4503599627370496,一共16位,同理,double的精度為15~16位。