簡要記錄浮點型資料的二進位制儲存格式

2021-05-24 09:12:09 字數 1238 閱讀 1096

浮點數包括

float

和double

兩種型別,

float佔32

位,double佔64

位。其二進位制儲存格式遵循

ieee754

標準。以

float

為例:符號位:正數為

0,負數為1以

float

型資料123.456

為例,分析其二進位制儲存格式:

首先將十進位制數

123.456

轉換為二進位制數為:

1111011. 01110100101111001 

(其中0.456

如何轉換為二進位制?不斷乘以2…)

1111011. 01110100101111001 

即1. 11101101110100101111001乘以2

的6次方首先這是乙個正數,則符號位為

0階碼為

6,不過要轉換成移碼。

(如何求

6的移碼?這裡我也不太深究,我見大家都是直接

6+127=133

,換為2

進製為10000101

)尾數則為

1. 11101101110100101111001

的小數部分,即

11101101110100101111001

綜上:123.456

的二進位制儲存格式為:

01000010

111101101110100101111001

用一段**來驗證一下:

#include

#include

using namespace std;

void printbinary(const unsigned char val)

int main()

system("pause");

} 要注意的是,

x86架構為小端模式,是指資料的低位儲存在記憶體的低

位址中,而數

據的高位儲存在記憶體的高位址中。所以上面的

for(int i = sizeof(float)-1; i >= 0 ; --i)

先列印高位址部分,即二進位制的高位元組資料。

程式的執行結果:

1000010

111101101110100101111001

對比一下剛才的分析結果是相同的。

double

型別和float

型別的二進位制儲存格式是同樣的道理。

簡要記錄使用二進位制恢復丟失資料

二進位制很重要,建議設定row格式,這個雖然儲存比較佔地方,但是是最安全的並且使用下面語句可以直觀的看到資料 mysqlbinlog base64 output decode rows v mysql bin.000001 text.txt 這樣具體的行記錄資訊在text.txt 就可以找到了 v ...

浮點數的二進位制

1.前幾天,我在讀一本c語言教材,有一道例題 include void main void 在我的編譯器下 編譯是會發生錯誤的。錯誤 cannot convert from int to float win7 vc6.0 sp6 執行結果如下 num的值為 9 pfloat的值為 0.000000 ...

hbase 二進位制資料寫入 Hbase的儲存

hbase中的每張表都通過行鍵按照一定的範圍被分割成多個子表 hregion 預設乙個hregion超過256m就要被分割成兩個,由hregionserver管理,管理哪些hregion由hmaster分配。hregionserver訪問乙個子表時,會建立乙個hregion物件,然後對錶的每個列族 ...