Java BigDecimal中的Karatsuba乘法实现

Java BigDecimal中的Karatsuba乘法实现,java,bit-manipulation,bitwise-operators,karatsuba,Java,Bit Manipulation,Bitwise Operators,Karatsuba,最近,我试图实现大数的Karatsuba乘法。然后我尝试将我的实现与Java BigInteger实现进行比较。我无法遵循这一行代码: // result = p1 * 2^(32*2*half) + (p3 - p1 - p2) * 2^(32*half) + p2 BigInteger result = p1.shiftLeft(32*half).add(p3.subtract(p1).subtract(p2)).shiftLeft(32*half).add(p2); 根据Karatsub

最近,我试图实现大数的Karatsuba乘法。然后我尝试将我的实现与Java BigInteger实现进行比较。我无法遵循这一行代码:

// result = p1 * 2^(32*2*half) + (p3 - p1 - p2) * 2^(32*half) + p2
BigInteger result = p1.shiftLeft(32*half).add(p3.subtract(p1).subtract(p2)).shiftLeft(32*half).add(p2);
根据Karatsuba算法,
result=(p1*10^(2*half))+((p3-p1-p2)*10^(half))+(p2)

由于实现使用int[],我认为32是Java整数中的位数

但我不明白其中涉及到向左移位的部分。有人能帮我弄明白这里发生了什么吗

算术移位是执行有符号整数二次幂乘法或除法的有效方法。有符号或无符号二进制数左移
n
位的效果是将其乘以
2^n
。在2的补码有符号二进制数上右移
n
位可以将其除以
2^n
,但它总是向下舍入(朝负无穷大方向)。


算术移位是执行有符号整数二次幂乘法或除法的有效方法。有符号或无符号二进制数左移
n
位的效果是将其乘以
2^n
。在2的补码有符号二进制数上右移
n
位有除以
2^n
的效果,但它总是向下舍入(朝负无穷大方向)。

@djxak你能告诉我该看那篇文章的哪一部分吗?看起来好像不相关。@djxak你说的是绝对的、完全的、彻底的废话。这是一个关于
BigDecimal
中Karatsuba乘法的Java问题。它与Javascipt或全局错误处理完全无关。行上的注释不是回答了这个问题吗?左移就像乘以2。伙计们,这当然不相关。只是错误的浏览器标签,我撤销了标志尽快,不知道为什么评论不是自动删除。现在删除它。你给出的算法是以10为基数的。Java实现在base 2^32中。@djxak你能告诉我我应该看那篇文章的哪一部分吗?看起来好像不相关。@djxak你说的是绝对的、完全的、彻底的废话。这是一个关于
BigDecimal
中Karatsuba乘法的Java问题。它与Javascipt或全局错误处理完全无关。行上的注释不是回答了这个问题吗?左移就像乘以2。伙计们,这当然不相关。只是错误的浏览器标签,我撤销了标志尽快,不知道为什么评论不是自动删除。现在删除它。你给出的算法是以10为基数的。Java实现在base 2^32中。