Как конвертировать число с плавающей запятой в двоичный? - PullRequest
33 голосов
/ 17 октября 2010

Может кто-нибудь сказать, пожалуйста, как я могу преобразовать это число с плавающей запятой: 12.25 в двоичный файл? Я знаю, как конвертировать "12", но не 0,25

Любая помощь очень ценится. Спасибо

Ответы [ 5 ]

24 голосов
/ 17 октября 2010

Продолжайте умножать число после десятичного числа на 2, пока оно не станет 1,0:

0.25*2 = 0.50
0.50*2 = 1.00

, и результат в обратном порядке будет 0,01

17 голосов
/ 12 декабря 2015

Рассмотрим пример ниже

Конвертировать 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.

См. эту ссылку для получения дополнительной информации.

13 голосов
/ 17 октября 2010

(d означает десятичную, b означает двоичную)

  1. 12,25d - это ваше число.
  2. Вы пишете 12d в двоичном виде и удаляете его из вашего поплавка. Только остаток (.25d) останется.
  3. Вы пишете точку.
  4. Пока остаток (0,25d) не равен нулю (и / или вам нужно больше цифр), умножьте его на 2 (-> 0.50d), удалите и напишите цифру слева от точки (0) и продолжите с новым остатком (.50d).
4 голосов
/ 11 февраля 2016

Значение с плавающей запятой хранится в формате IEEE 754, поэтому мы не можем преобразовать его напрямую, например, целое число, символ в двоичный файл.

Но мы можем преобразовать 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

Пробелы добавлены для пояснения, они не включены в программу.

1 голос
/ 17 января 2015
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
...