この浮動小数点数12.25をバイナリに変換する方法を教えてください。 「12」を変換する方法は知っていますが、0.25は変換しません
どんな助けも大歓迎です。ありがとう
10進数の後の数値に1.0になるまで2を掛け続けます。
0.25*2 = 0.50
0.50*2 = 1.00
結果は逆順で.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です。
詳細については、 this リンクを参照してください。
(dは10進数、bは2進数を意味します)
Float値は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
明確化のために追加されたスペースは、プログラムの一部として含まれていません。
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