value = (-1)sign*significand*2*exponet
sign:浮點數在記憶體中的表示符號的那位數的位數
significand:浮點數的有效數的二進位制形式
exponet:浮點數的指數(2的冪)(float 8位double 11位)
規格化:隱含的以1開頭的浮點數的二進位制表示
舉例:浮點數 記憶體中的表示 二進位制表示 significand exponet
121 00000000 00405e40 (0.1111001*2
6) (0.111001)2 6=1029(40e)-1023
0.875 00000000 0000ec3f (0.111)2 (0.11)2 -1=1022(3fc)-1023
0.1 99999999 9999b93f (0.000110011[0011])2 (0.10011[0011])2 -4=1019(3fb)-1023
其中在記憶體中使用的little endian的,所以121 的十六進製制表示為0x405e4000 00000000
//下面是用來測試自己設定的0.1的測試程式
#include
typedef unsigned char * byte_pointer;
void print_byte_double(byte_pointer bptr,int size)
浮點數在記憶體中的表示
c語言的float對應單精度浮點數,由1位符號 8位指數 23位尾數組成 尾數部分是二進位制小數,那23位是小數點後面的部分,小數點前面還有個隱含的1並不儲存 二進位制小數和十進位制小數道理一樣,只是基數變成2 比如十進位制的3.14 3x10 0 1x10 1 4x10 2 3 1 10 4 10...
浮點數在記憶體中的表示
printf f 5 printf d 5.01 輸出結果為 0.000000,乙個大數的原因。原因 int型讀成了double型 printf函式自動將float型轉化為double 就發生記憶體訪問越界,讀出非常小的數 float型讀成int型,就變成非常大的數了。2進製 10進製 對於大小為3...
浮點數在記憶體中的表示
浮點數在記憶體中的表示 c語言 浮點數在記憶體中的表示 單精度浮點數 1位符號位 8位階碼位 23位尾數 雙精度浮點數 1位符號位 11位階碼位 52位尾數 實數在記憶體中以規範化的浮點數存放,包括數符 階碼 尾數。數的精度取決於尾數的位數。比如32位機上float型為23位 double型為52位...