如何将浮点数转换为二进制?

Sli*_*ack 34 floating-point binary

任何人都可以告诉我如何将这个浮点数转换为12.25到二进制?我知道如何转换"12"而不是0.25

任何帮助深表感谢.谢谢

小智 24

将小数点后的数字乘以2,直到它变为1.0:

0.25*2 = 0.50
0.50*2 = 1.00
Run Code Online (Sandbox Code Playgroud)

结果是相反的顺序是.01

  • @Slim Black:注意:对于像0.25这样的数字可以正常工作,这些数字具有二进制的精确表示,但不适用于0.1之类的数字,而不是:0.1*2 = 0.2,0.2*2 = 0.4,0.4*2 = 0.8 ,0.8*2 = 1.6,0.6*2 = 1.2,0.2*2 = 0.4,......它永远重复,结果为0.0(0011)(括号中的部分重复). (11认同)

Gov*_*bhu 22

考虑下面的例子

将2.625转换为二进制.

我们将分别考虑整数和小数部分.

The integral part is easy, 2 = 10. 
Run Code Online (Sandbox Code Playgroud)

对于小数部分:

0.625   × 2 =   1.25    1   Generate 1 and continue with the rest.
0.25    × 2 =   0.5     0   Generate 0 and continue.
0.5     × 2 =   1.0     1   Generate 1 and nothing remains.
Run Code Online (Sandbox Code Playgroud)

因此0.625 = 0.101,并且2.625 = 10.101.

有关更多信息,请参阅此链接.


com*_*nad 14

(d表示十进制,b表示二进制)

  1. 12.25d是你的浮动.
  2. 你用二进制写12d并从你的浮点数中删除它.只留下余数(.25d).
  3. 你写点.
  4. 当余数(0.25d)不为零(和/或你想要更多数字)时,将它乘以2( - > 0.50d),删除并写入点(0)左边的数字,然后继续新的余数(.50d).

  • @nautilusvn:因为2的幂不是10的倍数,所以该数字具有无限的数字序列.你可能想在某个地方中止你的计算. (2认同)

小智 5

浮点值以 IEEE 754 格式存储,因此我们不能像整数、字符那样直接将其转换为二进制。

但是我们可以通过指针将浮点数转换为二进制数。

#include <stdio.h>

int main()
{
    float a = 7.5;
    int i;
    int * p;

    p = &a;
    for (i = sizeof(int) * 8 - 1; i >= 0; i--)
    {   
        printf("%d", (*p) >> i & 1); 
    }   

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出

0 10000001 11100000000000000000000
Run Code Online (Sandbox Code Playgroud)

为澄清而添加的空格,它们不包含在程序中。