Arrays 将数字拆分为位的一半

Arrays 将数字拆分为位的一半,arrays,split,bit,karatsuba,Arrays,Split,Bit,Karatsuba,作为练习的一部分,我正在实施karatsuba的方法。Karatsuba的方法本身并不十分困难,但其中一部分让我感到困惑。两个相乘的数字必须分成两部分,高位和低位。但我找不到关于如何进行拆分的更多信息 我注意到大多数Karatsuba实现都使用字符串来表示巨大的数字,但我做的有些不同。我将它们表示为一个整数数组,其中每个元素是巨大数字的下30位。请注意,这意味着这些数组可能是奇数长度。如果这个巨大的数字的大小不是30的倍数,它会得到前导零,所以它仍然可以这样表示 那么,如何将其分为高半部和低半部

作为练习的一部分,我正在实施karatsuba的方法。Karatsuba的方法本身并不十分困难,但其中一部分让我感到困惑。两个相乘的数字必须分成两部分,高位和低位。但我找不到关于如何进行拆分的更多信息

我注意到大多数Karatsuba实现都使用字符串来表示巨大的数字,但我做的有些不同。我将它们表示为一个整数数组,其中每个元素是巨大数字的下30位。请注意,这意味着这些数组可能是奇数长度。如果这个巨大的数字的大小不是30的倍数,它会得到前导零,所以它仍然可以这样表示

那么,如何将其分为高半部和低半部呢?我遇到的主要问题是,由于它的长度可能是奇数,这意味着我不能仅仅将数组除以它们的元素。基本上,我如何选择这些int数组的前半位和后半位,以便继续使用Karatsuba的方法进行递归


只要我能检索到位,我就可以从中创建两个较小的整数数组。

将数组一分为二,如果整数为奇数,左移然后将中间整数右移16得到左半部分,右移16得到右半部分?15如果您只使用30位对每个int进行编码(即使这很奇怪),那么如果有奇数个元素,我如何将数组拆分为两个?21个元素,10个在右边,10个在左边,按照我前面的注释中所述,使用位移位剪切中间的元素谢谢,这很有帮助。但是在你的第一个评论中,我认为你混淆了左右两半。向左然后向右移动会得到右边,向右移动会得到左边,我想是的。我确实把它弄混了