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

时间:2010-10-17 17:57:08

标签: binary floating-point

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

非常感谢任何帮助。 感谢

6 个答案:

答案 0 :(得分:24)

将十进制后的数字乘以2,直到它变为1.0:

0.25*2 = 0.50
0.50*2 = 1.00

,结果的顺序为.01

答案 1 :(得分:17)

考虑以下示例

将2.625转换为二进制。

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

The integral part is easy, 2 = 10. 

对于小数部分:

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.

因此0.625 = 0.101,而2.625 = 10.101。

有关详细信息,请参阅this链接。

答案 2 :(得分:13)

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

  1. 12.25d是你的漂浮物。
  2. 你用二进制写12d并从你的浮点数中删除它。只有 剩下的(.25d)将会离开。
  3. 你写点。
  4. 虽然余数(0.25d)不为零(和/或您想要更多数字),但将其乘以2( - > 0.50d),删除并写入点(0)左边的数字,然后继续新的余数(.50d)。

答案 3 :(得分:4)

浮点值以IEEE 754格式存储,因此我们无法将其直接转换为整数,char转换为二进制。

但我们可以通过指针将float转换为二进制。

#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;
}

<强>输出

0 10000001 11100000000000000000000

添加了空格以便澄清,它们不包含在程序中。

答案 4 :(得分:1)

x = float(raw_input("enter number between 0 and 1: "))

p = 0
while ((2**p)*x) %1 != 0:
    p += 1
    # print p

    num = int (x * (2 ** p))
    # print num

    result = ''
    if num == 0:
        result = '0'
    while num > 0:
        result = str(num%2) + result
        num = num / 2

    for i in range (p - len(result)):
        result = '0' + result
    result = result[0:-p] + '.' + result[-p:]

print result #this will print result for the decimal portion

答案 5 :(得分:0)

void transfer(double x) {
unsigned long long* p = (unsigned long long*)&x;
for (int i = sizeof(unsigned long long) * 8 - 1; i >= 0; i--) {cout<< ((*p) >>i & 1);}}
相关问题