C 程序:在具有 16*16 乘法器的处理器上将两个 32 位值 & return 乘以 64 位
C program: multiply two 32 bit value & return in 64-bit on a processor having a 16*16 multiplier
在最近的一次面试中,我被问到以下编码问题。有人可以帮我了解如何在 C 编码方面解决这个问题吗?
Q.
- 处理器有一个 16*16 乘法器来表示 32 位值。
- 取两个 32 位值,将它们相乘并 return 64 位格式。
让我们把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)。
在最近的一次面试中,我被问到以下编码问题。有人可以帮我了解如何在 C 编码方面解决这个问题吗?
Q.
- 处理器有一个 16*16 乘法器来表示 32 位值。
- 取两个 32 位值,将它们相乘并 return 64 位格式。
让我们把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)。