将分数部分转换为二进制

Luk*_*tka 0 c floating-point

我有一个浮点数的一小部分(例如-10.5中的5).这是一个角色,因为我从输入中提取了它.如何将该字符转换为该浮点数的二进制小数部分?(我正在构建一个浮点输入 - > 32位IEEE784的HEX输出,我已经提取了尾数的符号,指数和整数部分的二进制表示.)

我一直在考虑实现将分数乘以2并取余数的算法,然后重复直到填充尾数,但我不允许在赋值中使用任何浮点运算.

示例:用户输入-10.5.程序需要取数字的分数(即5)并将其转换为二进制格式(即1(.1))

编辑:我受到16位寄存器大小的限制,因此我需要一个解决方案来操作数字> 2 ^ 16-1.

Que*_*onC 5

你基本上有正确的想法.只需加倍小数部分,进位就成了数字.让我们尝试转换.7为二进制为例(.5太简单了)

NUMBER REMAINDER CARRY
    .7       ---     .
   1.4        .4     1
    .8        .8     0
   1.6        .6     1
   1.2        .2     1
    .4        .4     0
    .8        .8     0
   1.6        .6     1
   1.2        .2     1
&ct.
Run Code Online (Sandbox Code Playgroud)

所以.7二进制是.101100110.... 10.7就是这样1010.101100110...

一旦余数变为0,或者由于IEEE浮点精度的限制,总表示变为24位长,您可以停止转换为二进制.

请注意,十进制本身纯粹是装饰性的,这里不使用浮点数.

NUMBER     %10    /10
     7     ---      .
    14       4      1
     8       8      0
    16       6      1
    12       2      1
     4       4      0
     8       8      0
    16       6      1
    12       2      1
&ct.
Run Code Online (Sandbox Code Playgroud)

在这种情况下,.07你将代表剩余部分%100/100分别进行.在.007你的情况下你会使用%1000/1000.