Кто-нибудь может рассказать мне, как я могу преобразовать это число с плавающей запятой: 12.25 в двоичный? Я знаю, как преобразовать "12", но не 0,25
Любая помощь очень ценится. Благодаря
Кто-нибудь может рассказать мне, как я могу преобразовать это число с плавающей запятой: 12.25 в двоичный? Я знаю, как преобразовать "12", но не 0,25
Любая помощь очень ценится. Благодаря
Продолжайте умножать число после десятичного на 2, пока оно не станет 1.0:
0.25*2 = 0.50
0.50*2 = 1.00
и результат в обратном порядке равен 0,01
Рассмотрим пример ниже
Рассмотрим целую и дробную части отдельно.
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.
Смотрите эту ссылку для получения дополнительной информации.
(d означает десятичную, b означает двоичную)
Значение с плавающей запятой хранится в формате 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
Пробелы добавлены для пояснения, они не включены в программу.
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