浮點數在記憶體中的表示 例項

2021-04-13 00:34:39 字數 967 閱讀 9326

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位...