在尝试生成浮点数的位模式时,如下所示:
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
为什么 bitset 不能检测浮点数并正确输出位序列,当转换为 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
有理由不支持浮动吗?花车有替代品吗?