bit - 从 32 位整数中提取数字

标签 bit

我正在尝试解决编程测试中的谜题。

免责声明:这是对工作的测试,但我不是在寻找答案。我只是想了解如何执行此操作。测试要求我在 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/

相关文章:

c - 如何在 C 中正确地重新分配一个位数组

java - 为什么我的Key中的 '1'位越多,放到HashMap中的时间就越长?

C - 旋转 64 位无符号整数

c++ - ~ 和 - 之间的区别

c - 是否有测试是否在 int 中的任何位置设置非特定位的技巧?

comparison - 我如何测试两个位模式在任何 N 位中是否不同(位置无关紧要)

java - java中是否可以以20位而不是8、16、32位写入文件?

c - 将结构中的位组设置为值

delphi - 逐位读取字节 - 简化/加速建议 - Delphi

c++ - << C++ 中的运算符?