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

來源:互聯網
上載者:User

浮點型資料在記憶體中儲存的表示
實數在記憶體中以正常化的浮點數存放,包括數符、階碼、尾數。數的精度取決於尾數的尾數。比如32位機上float型為23位(因為正常化數的數位最高位恒為1,不必儲存,實際精度為24位,下面會有詳解),double型為52位。
浮點標記法類似於科學計數法,任一數均可通過改變指數部分,使小數點位置發生移動,如23.45可以寫成:2.345*10^1
浮點表示的一般形式為:R=M*2^e (R:Real M:Mantissa尾數 e:exponent階碼)
把上面float的二進位可分成三部分:
x        xxxxxxxx        xxxxxxxxxxxxxxxxxxxxxxx
數符(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:有效數字位
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
  二進位轉十字制
32位二進位浮點數為0 10000010 00010000000000000000000轉化成十進位數浮點數
數符部分為0,則代表此數為整數;階碼部分為10000010,則E=130,則e=E-127=3,則說明其向左移了3位,0001加上“整數”部分的1之後,為1.0001。則原位元為1000.1=十進位8.5

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.