定点数的乘法

信息处理 固定点
2022-02-09 18:51:23

我试图理解写关于 Q2 定点数 1.01 和 1.11 的教授,应该相乘。我什么都不懂。

将 Q2 定点数 1.01 和 1.11 相乘,并将结果作为 Q4 数。回答:

1.01 * 1.10
-----------
 0.01    (2-komplement of 1.01)
   0
 1.1111
-----------
10.0011 (sign extension)
 0.0011

乘法的结果是一个正数。因此,通过将布尔补数加到 1 来否定 1.01。最终结果是 0.011。这可以使用十进制乘法来验证。Q2 编号 1.01 是 -0.75 以十进制为底数,Q2 编号 1.10 是 -0.5 十进制。因此结果为 0.375,表示为 Q4 数字 0.11。

我完全不明白上面的内容。我知道 1.01 是 -0.75 而 1.10 是十进制的 -0.5_10 但为什么要使用 1.10,它来自哪里?为什么首先使用 2 补码?计算是什么意思?零是什么意思?这是我见过的最令人困惑的“答案”。

1个回答

提供的答案存在错误。这是相同的,但更正并重写了一点:

 1.01 * 1.11
--------------
 carry: 1 1
        1.1111  (shift right 1.11 with sign extension)
        0.000
      + 0.01    (2's complement of 1.11)
--------------
      = 0.0011

在这里,2's complement表示否定,这是通过翻转每个位并添加一个最低有效位 value 来完成的1在有符号二进制数的乘法中,如果第一个被乘数(未移位的那个)是负数,则通过用第二个被乘数代替最后一个被乘数进行减法来获得正确的结果,这就是+ 0.01行。这是一个二进制技巧,相当于实际拖动所有符号扩展名,这会导致进位中的值很大,并且需要更多的步骤:

 1.01 * 1.11
--------------
 carry: 2 1
        1.1111  (shift right 1.11 with sign extension)
        0.000
        1.11
        1.1     (sign extension of the multiplicand 1.01 is ...111.01)
      + 1.
--------------
      = 0.0011

结果中不需要有两个二进制小数.

减法技巧可以用不同的值进行测试,它通过了所有测试:

              carry:             1               1
second multiplicand: 000 001 010 011 100 101 110 111 
                     00  01  10  11  00  01  10  11
                   + 0   1   0   1   0   1   0   1
----------------------------------------------------
                   = 000 111 110 101 100 011 010 001
     2's complement: 000 111 110 101 100 011 010 001