C语言浮点数据在内存中的存储方式
float在內存中的存儲遵循IEEE 754標準。在C/C++中,float類型占4個字節即32位 , 這32位分成了3部分:
符號位最為簡單,如果你存儲的是正數那么符號數就是0。如果是負數,則為1。
下面,我以13.625為例說明階碼與尾數的表示方法。首先,我們取出13.625的整數部為13。對其使用短除法(對該數除以2,直至不能再除的一種方法)結果如下
將各余數自下而上排列,則得到了13的二進制表示。之后,取出13.625的小數部分為0.625對其每次乘2取出整數留下小數,直至得到1。結果如下
自上而下將取出的整數排列好,即得0.101。
這樣我們就得到了13.625的二進制表示。為1101.101。之后我們需將小數點移動至整數部只有一位。移動后得到1.101101。在此我們將小數點移動了三位。因而三即是該數的指數。而階碼則為指數+127(加127是C語言的內在邏輯,在此我們并不深究。)因而我們得到了13.625的階碼,為130。二進制表示10000010。
至于最后的尾數,將原先得到的1.101101去掉整數部分后在后面補齊17個0即可。(float類型的尾數有23位,若不夠,在后補齊0即可。)
最后我們得到了13.625的存儲數據
轉換成16進制后為 41 5A 00 00
程序驗證:
float a = 13.625;printf("%08X\r\n",*(unsigned int*)&a);
參考:
https://blog.csdn.net/yansmile1/article/details/70145416/
https://blog.csdn.net/itworld123/article/details/78914969
https://zhuanlan.zhihu.com/p/82761324
https://blog.csdn.net/qwertyuoi123456/article/details/53379068
總結
以上是生活随笔為你收集整理的C语言浮点数据在内存中的存储方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MCU提高ADC采样精度的几种方案
- 下一篇: C语言 计算结构体大小