C語言中的float和double數據在內存中是如何存儲的?

float類型在內存中佔用4個字節,遵循IEEE-754格式標準,一個float由三部分組成:底數m、指數e和符號s。
float在內存中的存儲形式如下:
在這裏插入圖片描述
float在內存中的具體格式如下:
SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM
S:佔用1位二進制數,表示浮點數的正負,0代表正數,1代表負數。
E:佔用8位二進制數,並且指數位是按補碼的形式來劃分的,float的指數範圍爲-127 ~ +128,由於指數可正可負,因此,IEEE標準規定,計算出來的指數必須加上127後纔可以存儲,在實際運算時,直接減去127就是真正的指數了。
M:佔用23位二進制數,使用二進制數來表示此浮點數的實際值,因爲小數點前必爲1,因此,IEEE標準規定,只記錄小數點後的就好。

【舉例】17.625在內存中的存儲格式?

第一步:將17.625換算爲二進制:10001.101
	換算規則1:整數部分,除以2,直到商爲0,餘數反轉。
	換算規則2:小數部分,乘以2,直到乘位0,進位順取。

第二步:將10001.101右移,直到小數點前只剩1位
	移位後:1.0001101 * 2^4

第三步:底數m、指數e和符號s
	底數m:因爲小數點前必爲1,因爲,IEEE規定只記錄小數點後的就好,底數爲:0001101
	指數e:實際爲4,必須加上127(轉出的時候,減去127),所以爲131,指數爲:10000011
	符號s:符號部分是正數,符號爲:0

第四步:綜上所述,17.625在內存中的存儲格式爲
	01000001100011010000000000000000	

double類型在內存中佔用8個字節,遵循IEEE-754格式標準,一個double由三部分組成:底數m、指數e和符號s。
double在內存中的存儲形式如下:
在這裏插入圖片描述
double在內存中的具體格式如下:
SEEE EEEE EEEE MMMM MMMM MMMM MMMM MMMM MMMM MMMM MMMM MMMM MMMM MMMM MMMM MMMM
S:佔用1位二進制數,表示浮點數的正負,0代表正數,1代表負數。
E:佔用11位二進制數,並且指數位是按補碼的形式來劃分的,double的指數範圍爲-1023 ~ +1024,由於指數可正可負,因此,IEEE標準規定,計算出來的指數必須加上1023後纔可以存儲,在實際運算時,直接減去1023就是真正的指數了。
M:佔用52位二進制數,使用二進制數來表示此浮點數的實際值,因爲小數點前必爲1,因此,IEEE標準規定,只記錄小數點後的就好。

【舉例】17.625在內存中的存儲格式?

第一步:將17.625換算爲二進制:10001.101
	換算規則1:整數部分,除以2,直到商爲0,餘數反轉。
	換算規則2:小數部分,乘以2,直到乘位0,進位順取。

第二步:將10001.101右移,直到小數點前只剩1位
	移位後:1.0001101 * 2^4

第三步:底數m、指數e和符號s
	底數m:因爲小數點前必爲1,因爲,IEEE規定只記錄小數點後的就好,底數爲:0001101
	指數e:實際爲4,必須加上1023(轉出的時候,減去1023),所以爲1027,指數爲:‭10000000011‬
	符號s:符號部分是正數,符號爲:0

第四步:綜上所述,17.625在內存中的存儲格式爲
	0100000000110001101000000000000000000000000000000000000000000000
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章