1. 程式人生 > 其它 >C/C++學習筆記之浮點數的儲存原理

C/C++學習筆記之浮點數的儲存原理

技術標籤:C語言基礎c++

C/C++學習筆記


一、 浮點數的儲存原理

int main(){
	float a=100;
	return 1;
}

在這裡插入圖片描述

通過以上程式碼可知,浮點數100轉化為十六進位制"42C8",並且以大端儲存的方法低位資料42和高位資料C8分別儲存在51處理器記憶體的低地址0x08和高地址0x09的單元中。

大端儲存:將資料的**高位**儲存在記憶體的高地址單元中
小端儲存:將資料的**低位**儲存在記憶體的高地址單元中

在這裡插入圖片描述

而在PC處理器中,則是以小端儲存的方式,將低位資料42和高位資料C8分別儲存在高地址和低地址單元中。

那麼,浮點數100如何轉化成十六進位制42C8呢? 其步驟如下:

首先將十進位制數100轉化為二進位制數:

1003644400
6432168421
1100100
36444000

即十進位制數100的二進位制數位01100100
因此得浮點數100為:01100100.00000000……,取1.1001000……*2^6,得尾數100100……(位數視處理器位數而定),根據IEEE 754標準,6即為階碼,故有6+127=133,二進位制表示為:10000101(8位),即為階數,由於是正數,故符號數0(1位)。假設在32位處理器中,尾數則有23位,因此完整的十六進位制表示如下:

0100 0010 1100 1000 0000 0000 0000 0000 (1位符號數+8位階數+23位尾數)
最後結果恰好為42C8。

同理,也可以通過地址單元中的十六進位制轉化為十進位制,但是求得階碼尾數後,一定要注意在尾數前加上隱去的"1"

,然後再通過二進位制數轉化為十進位制數,即得所求。