次のように float のビット パターンを生成しようとすると、次のようになります。
std::cout << std::bitset<32>(32.5) << std::endl;
コンパイラは次の警告を生成します。
warning: implicit conversion from 'double' to 'unsigned long long' changes value
from 32.5 to 32 [-Wliteral-conversion]
std::cout << std::bitset<32>(32.5) << std::endl;
警告を無視した場合の出力:):
00000000000000000000000000100000
char* にキャストし、メモリをウォーキングすると正しいシーケンスが表示されるのに、ビットセットがフロートを検出してビット シーケンスを正しく出力できないのはなぜですか? これは機能しますが、バイト順序に依存するマシンであり、ほとんど判読できません:
template <typename T>
void printMemory(const T& data) {
const char* begin = reinterpret_cast<const char*>(&data);
const char* end = begin + sizeof(data);
while(begin != end)
std::cout << std::bitset<CHAR_BIT>(*begin++) << " ";
std::cout << std::endl;
}
出力:
00000000 00000000 00000010 01000010
フロートをサポートしない理由はありますか? フロートの代替品はありますか?