在最近的一次采访中,有人问我以下编码问题。有人可以帮我理解如何用C编码解决这个问题吗?
问。
答案 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)。