Напишите программу для печати двоичной формы двойного? Я считал, что например: 1 Представление должно быть напечатано. Правильно ли печатать так? Или я должен напечатать в , например: 2.Является ли моя интерпретация правильной? Могу ли я печатать двоичное представление для double, например: 1?
например:
бинарное представление для 23.5 является 0000000000000000000000000010111,1
где формат IEEE754 говорит реальные данные, хранящиеся в памяти компьютера, как
0 | 10000011 | 01111000000000000000000000000000000000000000000000000000
знак | экспоненты | мантисса
#include<stdio.h> main() { double decimal,decimal1,f; int nbits,num,i,j,a[32],b[50],n; printf("enter double:"); scanf("%lf",&f); num=(int)f;//to get integral part of float /*finding binary equivalent of integral part and storing them in an array */ nbits=sizeof(num)*8-1; j=nbits; for(i=0;i<=nbits;i++) { a[j]=(num>>i)&1; j--; } f=(f>0)?f:(-f);// to get absolute value if float is a negative number num=(num)>0?num:(-num); decimal=f-(double)num; decimal1=decimal; /*to get binary equivalent of decimal part*/ for(i=0;decimal!=0;i++) { decimal=decimal*2; b[i]= (int)decimal; n=i; if(decimal==decimal1) //to stop recurrence of decimal points { break; } if(decimal>=1) { decimal=decimal-1; }
}
for(i=0;i<=31;i++) { printf("%d",a[i]); }
Е ("");
for(i=0;i<=n;i++) { printf("%d",b[i]);
}
printf("\n");
}
В приведенном выше коде, чтобы остановить рецидив, я дал перерыв заявление, чтобы разорвать петлю. Я проверил значения decimal1 и десятичный для каждой итерации. Даже если decimal1 = decimal, цикл не прерывается. Но цикл заканчивается, когда n = 46. Я не могу понять, что там происходит. Пожалуйста, помогите мне исправить ситуацию.
И я хочу знать, правильно ли мой код печатает двоичный эквивалент double.
мне нужно, чтобы получить выход в следующем виде
1st execution:
enter double:23.5
0000000000000000000000000010111.1
2nd execution:
enter double:23.4
0000000000000000000000000010111.0110
Во втором исполнении, я вошел 23.4. Двоичный эквивалент 0.4 - это повторение 0110. Я использовал оператор break, чтобы остановить повторение. Таким образом, согласно моему анализу моего кода, второй выход исполнение должно быть как выше format.But я получаю ниже выход для 23,4
enter double:23.4
0000000000000000000000000010111.01100110011001100110011001100110011001100110011
Я не могу понять, что делает второй для контура прекращения после печати 47 бит.
Даже не близко. Во-первых, вы передаете 'int'. Как насчет всех тех, кто выходит за пределы диапазона int? Я не уверен, что вы думаете, что это должно делать. –
Что именно вы подразумеваете под «двоичным форматом двойного»? Вы пытаетесь распечатать внутренний формат, в котором хранится номер, или напечатать номер в виде дробного десятичного знака? (Совершенно иная.) – duskwuff
напечатать число как дробное десятичное число –