浮點型資料在記憶體中的儲存

2021-06-29 14:06:50 字數 1587 閱讀 3861

原文**

學計算機n年了,一年懶得去了解小數的存放,趁今天想知道double資料存放格式,了解了一下,真是懶不得,無論什麼樣的基礎知道,早晚一天還是要學到心中的。

一、浮點型資料在記憶體中儲存的表示

實數在記憶體中以規範化的浮點數存放,包括數符、階碼、尾數。數的精度取決於尾數的尾數。比如32位機上float型為23位(因為規範化數的數碼最高位恒為1,不必儲存,實際精度為24位,下面會有詳解),double型為52位。

單精度float型儲存在記憶體中的大小為4個位元組,即32位。

******xx ******xx ******xx ******xx

浮點表示法類似於科學計數法,任一數均可通過改變指數部分,使小數點位置發生移動,如23.45可以寫成:2.345*10^1

浮點表示的一般形式為:r=m*2^e (r:real m:mantissa尾數 e:exponent階碼)

把上面float的二進位制可分成三部分:

x ******xx *********************xx

數符(1b) 階碼(8b) 尾數(23b)

double型的浮點數分別是:數符(1b)、階碼(8b)、尾數(52b)

數符sign:real的正負號 "+":0 "-":1

階碼e:這裡二進位制其實是移碼e(0~255)的表示,e=e-127(double型中e=e-1023) e為正值說明這個浮點數向左移動了e位,e為負值說明這個浮點數向右移動了e位。127=2^7-1 1023=2^10-1

尾數m:有效數字位,這裡是有效數字位的部分二進位製碼,為什麼說部分呢?仔細看通上下文就可以知道了。

例1:float型浮點數125.5轉化成32位二進位制浮點數

125.5的二進位製碼為1111101.1,寫成二進位制的科學計數為:1.111101*2^6(因為科學計數法「整數」部分大於1,在二進位制中,「整數」部分只能恒為1)即向左移6位,則e=6,則e=e+127=133,而e的二進位製碼為10000101,而1.111101把「整數」部分去除1之後為111101,之後補0,共23b,形成了尾碼。

所以125.5的32位二進位制浮點數為

0 10000101 11110100000000000000000

例2:float型浮點數0.5轉化成32位二進位制浮點數

0.5的二進位製碼為0.1,寫成二進位制的科學計數為:1.0*2^(-1)即向右移1位,則e=-1,則e=e+127=126,而e的二進位製碼為01111110,而1.0把「整數」部分去除1之後為0,之後補0,形成了階碼。

所以0.5的32位二進位制浮點數為

0 01111110 00000000000000000000000

double型浮點數類似。

二、 二進位制轉十字制

例3:32位二進位制浮點數為0 10000010 00010000000000000000000轉化成十進位制數浮點數

題中已給我們分了三部分,數符部分、階碼部分、尾數部分。

數符部分為0,則代表此數為整數;階碼部分為10000010,則e=130,則e=e-127=3,則說明其向左移了3位,0001加上「整數」部分的1之後,為1.0001。則原二進位制數為1000.1=十進位制8.5,或r=1.0001*2^3=8.5

其中很多計算類似。可舉一反三!

浮點型資料在記憶體中的儲存

3.14159 1e10 float double long double 規定1.任意乙個二進位制浮點數f都可以表達成下面的形式 1 s m 2 e 1 s 表示符號位,當s 0時,f為正數 當s 1時,f為負數。m表示有效數字,大於等於,小於2.2 e表示指數字。舉例說明 十進位制的5.0,二進...

浮點型在記憶體中的儲存

以單精度型別變數為例 1.國際標準ieee 電氣和電子工程協會 754,任意乙個浮點數都可以表示為 1 s m 2 e,其中 1 s表示符號位,當資料為負時s 1,當資料為正時s 0 2 m表示有效數字位,它在記憶體中佔據23個位元位,它的取值範圍是大於等於1,小於2,而計算機對m進行存的時候只存小...

整數 浮點型在記憶體中儲存

1 整數在記憶體中的儲存 在計算機系統中,整數統一用補碼來表示和儲存。這裡普及一下 原碼 反碼 補碼 這三種表示方式均有符號位和數值為兩部分,符號位是首位用 0 表示 正數 用 1 表示 負數 原碼 直接將二進位制按照正負數的形式翻譯成二進位制就可以了。反碼 將原碼的符號位不變,其他位按位取反就可以...