C程序:将两个32位值相乘并在具有16 * 16乘法器的处理器上以64位返回

时间:2020-08-31 09:50:15

标签: c embedded

在最近的一次采访中,有人问我以下编码问题。有人可以帮我理解如何用C编码解决这个问题吗?

问。

  • 处理器的16 * 16乘法器代表32位值。
  • 取两个32位值,将它们相乘,然后以64位格式返回。

1 个答案:

答案 0 :(得分:1)

让我们调用32位数字A和B。现在,让我们将它们分为16位数字,a0 / b0和a1 / b1(a0是更大的部分)。

现在,A*B == (a0<<16+a1) * (b0<<16+b1) == (a0 * b0) << 32 + (a1 * b0 + a0 * b1) << 16 + a1 * b1

注意:这里所有的乘法都是16位数字(a0,a1,b0,b1)的结果,结果是将32位数字转换为64位(数字中较大的32位为0)。