将负数转换为 2 的补码中的分数

Convert a negative number with a fraction in 2's complement

我想转换数字-0.25。所以 0.25(对于 4 位 int 和 4 位 frac)等于:

0000_0100

对于负数-1,答案是

1111

但是-0.25 是多少?如何将此负数转换为 2 的补码中的分数?

为了回答这个问题,我需要澄清一下,数字是用定点表示的。现在几乎所有的逻辑都使用二进制补码。因此,在二进制补码版本中考虑负数,例如:

signed 4'b1100 = -4 (-1*2^3 + 1*2^2 + 0*2^1 + 0*2^0).

定点二进制数,例如 0.25 将表示为:

8'b0000_0100 (int 4 bit is zeros and frac 4 bit -> 0*2^-1 + 1*2^-2 + 0*2^-3 + 0*2^-4).

其他计算方法可以将数字乘以整数找到负数,然后除以该数字(请记住,2 的乘法是右移,2 的除法是左移)。

对于我的示例 -0.25 如下:

-0.25*2*2= -1. 
-1 = 4'b1111.
shift 2*2 to left = 4'b11_11 = -0.25.
Or we can calculate: -1*2^1 + 1*2^0 + 0*2^-1 + 1*2^-2.

MSB 中的 1 为有符号位。我们在使用有符号逻辑操作时必须记住这一点。