Java 如何管理和操作非常大的二进制值
我需要读入两个由二进制数字组成的非常大的字符串。这些字符串可能非常大(高达100000位),我需要存储它们,能够操作(翻转位)并将它们相加。我的第一个想法是将字符串分成8个字符的块,将它们转换成字节并存储在数组中。考虑到需要翻转的位的索引,这将允许我相对轻松地翻转位,但使用这种方法,我不确定如何将两个值的全部相加 有没有人能找到一种存储这些值的有效方法,让我仍然能够对它们进行计算 编辑: “相加”(连接?算术加法?-算术加法 我的问题是,在最困难的情况下,我有两个100000位的数字(存储在12500字节的数组中)。存储和手动翻转位不是问题,但我需要两个数字的总和,然后才能找出第X位是什么。“二进制数字字符串”对我来说绝对像字节数组。要将两个这样的字节数组“添加”在一起,只需分配一个足够容纳所有内容的新字节数组,然后使用Java 如何管理和操作非常大的二进制值,java,byte,bit,Java,Byte,Bit,我需要读入两个由二进制数字组成的非常大的字符串。这些字符串可能非常大(高达100000位),我需要存储它们,能够操作(翻转位)并将它们相加。我的第一个想法是将字符串分成8个字符的块,将它们转换成字节并存储在数组中。考虑到需要翻转的位的索引,这将允许我相对轻松地翻转位,但使用这种方法,我不确定如何将两个值的全部相加 有没有人能找到一种存储这些值的有效方法,让我仍然能够对它们进行计算 编辑: “相加”(连接?算术加法?-算术加法 我的问题是,在最困难的情况下,我有两个100000位的数字(存储在12
System.arraycopy
复制内容
然而,假设每个“字符串”是8位的倍数。如果您想将一个15位的字符串“添加”到另一个15位的字符串中,则需要进行位移位。这对你来说可能是个问题吗?根据您需要的操作,您甚至可能希望只保留一个对象,该对象了解两字节数组,并且可以在逻辑连接的“字符串”中找到任意位
无论哪种方式,byte[]
都将是前进的方向——或者可能。那怎么办
// Addition
byte[] resArr = new byte[byteArr1.length];
for (int i=0; i<byteArr1.length; i++)
{
res = byteArr1[i]+byteArr2[i];
}
//添加
byte[]resArr=新字节[byteArr1.length];
对于(int i=0;iThanks Jon,位集看起来是前进的方向。我如何才能有效地使用位移位将这两个数字相加?@Martyn:我不确定使用位集
的最佳方法-对于字节数组,您需要迭代每个字节,必要时进行移位,或者使用前一个字节的剩余部分进行运算(这也会被改变)。这将是一种灵活的方式,而不是“简单的闪电”式的效率,但它应该不会太差。我建议你在纸上画一些样本。如果你在添加数字,你可能会更幸运地使用BigInteger
。