我正在编写从输入中获取浮点数并输出该数字的十六进制表示的程序。
我为解决它所做的是:
- 将数字除以整数和小数部分。
- 将整数和小数部分转换为二进制表示。a) 整数除以 2,如果数字 mod2 ==1,则加 1,否则加 0。将整数翻转。b) 小数部分乘以 2,如果大于 1,则减 1,然后再做一次。
- 如果 number 小于 0,则符号为 1,否则符号为 0。
- 获取指数(127+/-x),将其转换为二进制(整数)。
- 获取尾数。
- 将符号+指数+尾数转换为十六进制。
我的程序通过了 SPOJ 论坛上的所有测试。我不得不寻找自己失败的手动测试用例。
所以在号码 -123123.2323 的情况下,我收到了号码:
(十六进制) c7 f0 79 9d
二进制整数=11110000011110011 二进制十进制=0011101101111000000000 ....
尾数= 1110000011110011 0011101
同时https://www.h-schmidt.net/FloatConverter/IEEE754.html给了我:
尾数= 1110000011110011 0011110
它是如何工作的,为什么在这种情况下会这样?当我将 0.2323 转换为二进制时,使用https://www.rapidtables.com/convert/number/decimal-to-binary.html?x=0.2323它给了我 0. 0011101 101111。我使用这部分在添加后完成尾数整数 (-1),最多 23 位。我究竟做错了什么?