仅使用8位数乘以两个32位数

时间:2013-09-14 20:56:16

标签: c pointers bit multiplication

我在网上看到了这个面试问题,除了通常的添加方法之外,找不到好的方法。 任何建议,如果可以使用一些bithift /递归或类似的东西更快地完成?

1 个答案:

答案 0 :(得分:2)

Bitshifting将是解决方案的自然组成部分。

要将值 a 乘以8位值 b ,对于 b 中的每1位,将所有值相加 a 乘以 b ,其他所有位设置为0.例如,a * 10100001 = a * 10000000 + a * 00100000 + a * 00000001

更进一步,假设我们希望将11001011乘以0010000,这是11001011(bin) << 4(dec)。在8位值上执行此操作会为您提供10110000。您还从一开始就丢失了(8-4)=4位。因此,您还希望11001011(bin) >> 4(dec)00001100作为进位到下一个“8位列”(假设我们使用8列来表示64位答案)。

递归并不是必需的。你需要的只是循环通过第一个32位数字的4个字节,另一个循环通过内部第二个数字的4个字节,依次将每对字节相乘并将其添加到你的解决方案中。