IEEE754浮點數的表示方法:N = (-1)^s x m x 2^e
,其中s爲符號位,m是尾數位,e是指數位。code
種類 | 符號位 | 指數位 | 尾數位 |
---|---|---|---|
float | 第31位(佔1bit) | 第30-23位(佔8bit) | 第22-0位(佔23bit) |
double | 第63位(佔1bit) | 第62-52位(佔11bit) | 第51-0位(佔52bit) |
對於單精度浮點數(float)來講,符號位一位,指數位8位,尾數23位。指數可以表示的指數範圍爲-128~127,尾數爲23位。內存
float和double的精度是由尾數的位數來決定的。浮點數在內存中是按科學計數法來存儲的,其整數部分始終是一個隱含着的「1」,因爲它是不變的,故不能對精度形成影響。it
其中負指數決定了浮點數所能表達的絕對值最小的非零數;而正指數決定了浮點數所能表達的絕對值最大的數,也即決定了浮點數的取值範圍。(指數二進制轉換爲十進制)table
具體計算公式N = (-1)^s x m x 2^e
,以float爲栗子,但s=0,m=23,e=8時:class
+1.1111111111111111111111 x 2^127(小數點後面23個1,因爲尾數的範圍1~2,其最高位總爲1,故只需存取小數部分,因此小數爲是23位1),約等於2 x 2^127=3.4 x 10^38。負數亦然。二進制
long表示的是一個整型的數據,在不一樣系統或語言定義可能不一樣,在內存32位或64位,即表示的是一個有32/64位二進制數表示的一個整數,最大爲 2^63-1.float
但double不同,表示的是浮點數,以EEE754浮點數表示方法爲:N = (-1)^s x m x 2^e
,其範圍和精度是由其指數和位數決定的。所說的32位或64位是指該浮點數的符號位+指數位+尾數位
.方法
二者在表示形式就不同,而不能簡單地根據數據所佔位數去比較它們的大小。數據
補充:理解32位系統和64位系統tab
32位系統CPU一次可處理32位數據,即一次處理4個字節;64位系統CPU一次可處理64位數據,即一次處理8個字節。
x86與x86-64有什麼區別呢?x86指的是通常意義上的32位Intel處理器;而x86_64 則是通常意義上的64位Intel處理器。