负十进制转定点二进制

问题描述

IS -28.91 = 00100.0111 ??

28 -> 11100 然后翻转并加 1 -28 -> 00100

.91 -> 0111 精确到小数点后 4 位

我试图检查很多地方来检查我的转换是否正确,但我没有成功。所以我喜欢问这里的人我是否正确。

解决方法

为了使加法/减法和其他运算正常工作(通过对整个位模式使用二进制加法),作为整数的整个事物(整数和小数部分组合)必须是 x * 2^4。>

0b00100.0111 表示的实际值为 0b001000111 / 16。

这意味着您必须对整数位和小数位一起进行 2 的补码取反(从 0 进行二进制减法,或使用反转并加 1 个标识)。

此外,您的 28 值设置了其 MSB,因此它已经为负数,即您溢出了 5 位有符号 2 的补码。大概你实际上有一个更宽的整数部分。

对于 16 位 12.4 定点,28.91

  • 28.91 * 16 = 462.56,四舍五入为 463。
  • +463 = 0b0000000111001111
  • -463 = 0b1111111000110001

作为 12.4 定点,这个 0b111111100011.0001 位模式表示 -463/16 = -28.9375,最接近 -28.91 的可表示值