浮點數包括
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物件,然後對錶的每個列族 ...