我正在尝试解决编程测试中的一个谜语。
免责声明:这是对工作的测试,但我不是在寻找答案。我只是想了解如何做到这一点。测试要求我在 2 周内对一组问题提出一套解决方案,并且没有要求我孤立地得出解决方案。
所以,问题:
我有一个 32 位数字,其位排列如下:
siiiiiii iiiiiiii ifffffff ffffffff
在哪里:
- s 是符号位(1 == 负)
- i 是 16 个整数位
- f 是 15 个小数位
任务是编写将 32 位整数解码为浮点数的内容。给定以下输入,它应该产生以下输出:
input output
0x00008000 1.0
0x80008000 -1.0
0x00010000 2.0
0x80014000 -2.5
0x000191eb 3.14
0x00327eb8 100.99
我在获取符号位或数字的整数部分时没有问题。我得到这样的标志:
boolean signed = ((value & (1 << 31)) != 0);
我得到这样的整数和小数部分:
int wholePart = ((value & 0x0FFFFFFF) >> 15);
int fractionPart = ((value & 0x0000FFFF >> 1));
我遇到问题的部分是获取最后 15 位中的数字以匹配预期值。我得到的不是 3.14,而是 3.4587,等等。
如果有人可以提示我做错了什么,我将不胜感激。最重要的是,我在搞砸了几个小时后还没有弄清楚这一点,这让我发疯了。:-)