1. 程式人生 > >JAVA基本資料類型範圍和float、double精度問題

JAVA基本資料類型範圍和float、double精度問題

1.八中資料型別的分類如下:

 第一類:整型 byte short int long

第二類:浮點型 float double

第三類:邏輯型 boolean(它只有兩個值可取true false)

第四類:字元型 char

2.各種基本資料型別所佔的位元組:

boolean 布林型                 1/8 
byte 位元組型別                    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位。