binary - 計算機 - 浮動小数点数をバイナリに変換するには?




浮動小数点数 10進数 変換 (4)

(dは10進数を意味し、bはバイナリを意味する)

  1. あなたのフロートは12.25dです。
  2. あなたはバイナリで12dを書いてあなたのフロートからそれを削除します。 残りの部分(.25d)のみが残されます。
  3. あなたはドットを書きます。
  4. 残りの部分(0.25d)はゼロではない(そして/またはより多くの桁を必要とする)一方、それを2( - > 0.50d)で乗算し、ドット(0)の左の数字を削除して書き出し、 (.50d)。

誰でもこの浮動小数点数をどのように変換することができますか教えてください:12.25バイナリに? 私は "12"ではなく0.25を変換する方法を知っています

どんな助けでも大歓迎です。 ありがとう


以下の例を考えてみる

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リンクを参照してください。


浮動小数点値はIEEE 754 formateに格納されているので、整数、charなどを直接バイナリに変換することはできません。 しかし、floatをポインタでバイナリに変換することはできます。

main()
{
float a=7.5;
int i,*p; p=&a;
for (sizeof(int)*8-1;i>=0;i--)
printf("%d",(*p)>>i&1);
}
OUTPUT::0 10000001 11100000000000000000000---space for better clarification  not included in part of the program.

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