float結構如下圖:
float的數學計算式如下:
其中,符號位:sign,正數為0,負數為1舉個例子:指數字:exponent,二進位制數轉10進製數,範圍是-127(0000 0000)~127(1111 1110)
尾數字:base,二進位制數
假設有個浮點數 -12.75 ,我們把它轉換成二進位制輸出float的十六進製制數(c/c++) :因為它是負數,所以符號位就是 1 (相反,正數的話符號位就是 0 )
我們先將 12.75(忽略負號)轉換成二進位制小數 1100.11 (這裡不明白怎麼轉換的,再去看看上面兩張圖)
然後再將這個二進位制小數轉換成科學計數法 1.10011 *2^3 ,這時候我們就得到了尾數部分,為小數部分 10011,後面補 0,佔滿23位,即 10011000000000000000000
最後,我們只差指數字沒有填進去了,理所當然的,指數字就是要把 2^3的指數 3 填進去,怎麼填進去呢(注意:指數也有可能是負數)
填進去的方法就是 加上127 然後 轉 2 進製 再填進去,具體就是 3 + 127 = 130 => 10000010
(
#include#includeusing namespace std;
void main(int argc, char* ar**)
printf("\n");
printf("\na=%e", a);
}//
float的正數最大值 :
十六進製制0x7f7ffffffloat的正數最小值:二進位制0111 1111 0111 1111 1111 1111 1111 1111
數學式為
理論值約為3.8e+38
實際c計算得到如下:
在c中,對於0x7fffffff,表示0111 1111 1111 1111 1111 1111 1111 1111,輸出為nan
十六進製制0x00000001二進位制0000 0000 0000 0000 0000 0000 0000 0001
數學式為
微控制器 MATLAB浮點數(float32)通訊
程式思路 描述 把float型資料原封不動的按照儲存4位元組傳送 輸入 要傳送的浮點數 輸出 無 void float send float data 這裡想請教一下大家,為什麼add unsigned char data 中要帶 unsigned char 不然就給waring point to ...
浮點數 float和double
浮點數使用格式符 f 控制,預設保留小數點後6 位數字。所以當判斷浮點數是否為0的時候,要與 0.000001 和0.000001比較。if abs x 0.000001 有時我們希望自己控制列印的寬度和小數字數,這時就應該使用 m.nf 格式,其中m 表示列印的寬度,n 表示小數點後的位數。m是總...
c語言浮點數的體會
浮點數的型別分3類 1.float,單精度浮點數 占用4個位元組,表示範圍 3.4e 38 3.4e38 2.double,雙精度浮點數 占用8個位元組,表示範圍 1.7e 308 1.7e308 3.long double,長 雙精度浮點數 占用10個位元組,表示範圍 1.2e 4932 1.2e...