了解浮点数的二进制表示形式

时间:2019-06-06 15:33:22

标签: c++ floating-point binary

我正在使用以下代码来打印浮点数的“二进制表示形式”:

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...。第二点很有意义。我对之后的每个输出都感到困惑,尤其是最后一个输出。

先谢谢了。

1 个答案:

答案 0 :(得分:4)

假设您所指的是IEEE754二进制浮点格式,则32位浮点数由1个符号位,8个指数位和23个有效(aka分数)位组成。作为示例,您的示例transformResponse的显示方式如下:

0.2

您可以在Wikipedia页面上进一步了解格式本身:https://en.wikipedia.org/wiki/IEEE_754#Basic_and_interchange_formats,还可以在https://en.wikipedia.org/wiki/Single-precision_floating-point_format

中阅读单精度格式的详细信息。