Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何管理和操作非常大的二进制值_Java_Byte_Bit - Fatal编程技术网

Java 如何管理和操作非常大的二进制值

Java 如何管理和操作非常大的二进制值,java,byte,bit,Java,Byte,Bit,我需要读入两个由二进制数字组成的非常大的字符串。这些字符串可能非常大(高达100000位),我需要存储它们,能够操作(翻转位)并将它们相加。我的第一个想法是将字符串分成8个字符的块,将它们转换成字节并存储在数组中。考虑到需要翻转的位的索引,这将允许我相对轻松地翻转位,但使用这种方法,我不确定如何将两个值的全部相加 有没有人能找到一种存储这些值的有效方法,让我仍然能够对它们进行计算 编辑: “相加”(连接?算术加法?-算术加法 我的问题是,在最困难的情况下,我有两个100000位的数字(存储在12

我需要读入两个由二进制数字组成的非常大的字符串。这些字符串可能非常大(高达100000位),我需要存储它们,能够操作(翻转位)并将它们相加。我的第一个想法是将字符串分成8个字符的块,将它们转换成字节并存储在数组中。考虑到需要翻转的位的索引,这将允许我相对轻松地翻转位,但使用这种方法,我不确定如何将两个值的全部相加

有没有人能找到一种存储这些值的有效方法,让我仍然能够对它们进行计算

编辑: “相加”(连接?算术加法?-算术加法

我的问题是,在最困难的情况下,我有两个100000位的数字(存储在12500字节的数组中)。存储和手动翻转位不是问题,但我需要两个数字的总和,然后才能找出第X位是什么。

“二进制数字字符串”对我来说绝对像字节数组。要将两个这样的字节数组“添加”在一起,只需分配一个足够容纳所有内容的新字节数组,然后使用
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