【发布时间】:2019-06-06 15:33:22
【问题描述】:
我正在使用以下代码打印出浮点数的“二进制表示”:
template<class F>
void printBinary(F value)
{
std::cout <<
std::bitset<sizeof(F) * 8>(*reinterpret_cast<unsigned long*>(&value)).to_string()
<< std::endl;
}
int main()
{
float f = 1;
printBinary(f);
f = 2;
printBinary(f);
f = 3;
printBinary(f);
f = 4;
printBinary(f);
f = 16;
printBinary(f);
f = 0.2;
printBinary(f);
}
它输出:
00111111100000000000000000000000
01000000000000000000000000000000
01000000010000000000000000000000
01000000100000000000000000000000
01000001100000000000000000000000
00111110010011001100110011001101
谁能解释输出二进制数的哪些部分对应于浮点数的哪些部分?我希望第一个只是10000...。第二个是有道理的。我对之后的每一个输出都感到困惑,尤其是最后一个。
提前致谢。
【问题讨论】:
-
标准中没有规定,但所有主要编译器都使用IEEE-754作为浮点表示。
-
"我希望第一个只是
10000..." 为什么?这不是负数.. -
因为如果 2 由
01表示,那么对于 1,您会将1滑过使其成为10。 -
@zoecarver 第一位通常(即使在整数实现中)保留用于区分符号。 0 = 正; 1 = 否定。
-
现在说得通了。 @AlgirdasPreidžius 感谢您的解释。
标签: c++ floating-point binary