我正在做一個將任何實數轉換成定點的專案。
例如,下面的代碼:
float ff = 8.125f;
std::cout << std::bitset<32>(ff) << std::endl; //print binary fotmat
輸出:
00000000000000000000000000001000
僅列印出整數部分。
當我做:
float ff = 8.125f;
int va = ff * (1 << 8); //8bits shift left
std::cout << std::bitset<32>(va) << std::endl; //print binary fotmat
輸出是:
00000000000000000000100000100000
分數部分也列印出來的地方。
我不明白為什么。
uj5u.com熱心網友回復:
僅列印出整數部分。
嗯,當然,因為這就是您給出的全部內容bitset:沒有std::bitset帶float引數的構造函式,所以您ff將被轉換為unsigned long long,這將丟失小數部分(如任何從浮點型別到整數的轉換)型別將)。打開編譯器警告會提醒您注意這一點;例如,對于您的第一個代碼片段,MSVC 編譯器顯示:
警告 C4244:“引數”:從“浮點數”到“無符號 __int64”的轉換,可能會丟失資料
在您的第二個示例中,您將float值乘以256 并轉換為整數值,2080這就是傳遞給bitset.
如果您想在 中完整按位表示float變數,則bitset需要先將該資料復制到unsigned long long變數中并將其傳遞給建構式:
unsigned long long ffdata = 0;
std::memcpy(&ffdata, &ff, sizeof(ff));
std::cout << std::bitset<32>(ffdata) << std::endl;
輸出:
01000001000000100000000000000000
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/397892.html
上一篇:如何呼叫使用c 操作的方法
