我正在尝试解决编程测试中的谜题。
免责声明:这是对工作的测试,但我不是在寻找答案。我只是想了解如何执行此操作。测试要求我在 2 周内针对一组问题提出一组解决方案,而不是要求我孤立地得出解决方案。
所以,问题:
我有一个 32 位数字,其位排列如下:
siiiiiii iiiiiiii ifffffff ffffffff
地点:
- s 是符号位(1 == 负数)
- i是16位整数
- f是15个小数位
作业是编写将 32 位整数解码为 float 的内容。给定以下输入,它应该产生以下输出:
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,等等。
如果有人可以提示我做错了什么,我将不胜感激。最重要的是,经过数小时的困惑我还没有弄清楚这一点,这让我有点抓狂。 :-)
最佳答案
公司的投入没有错。小数位不代表小数点右边的文字数字,它们代表小数部分。不知道在不放弃的情况下还能怎么说。说存在分歧是不是暗示太大了?
关于bit - 从 32 位整数中提取数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1698903/