簡體   English   中英

java中的長二進制字符串算法

[英]Long binary string arithmetic in java

我正在做一個基於服務器的程序,我希望將2個二進制字符串相乘。 這些字符串很長,因此它們不能轉換為longint類型。 其中一個字符串的示例是:

01100010 00110110 00110011 00110111 00110100 00111001 00111001 00111001 00110110 01100011 00110110 01100101 00111001 00110011 00110011 00110010 00110010 00110010 01100001 00110101 01100100 01100011 01100011 01100010 01100100 00111000 01100100 01100100 00110010 00110110 00110110 00110100 00111000 01100110 00110001 00110100 00110110 01100110 01100110 01100100 00110100 00110101 00110100 01100010 01100010 00111001 00111001 00110110 01100110 01100010 00111000 00110011 00110000 00110011 00110010 01100110 01100010 00110001 01100010 01100001 00110100 01100011 01100011 00111000 00110110 00110111 01100110 00110001 00111001 00110110 00110110 00110001 00110001 01100101 00110010 00111000 01100100 01100110 01100110 01100001 01100100 00110100 00110110 00110000 00110010 00111001 00111001 00110011 00111000 01100001 00111001 00110111 00110111 00110011 00110010 01100011 00110100 00110000 01100011 01100101 01100010 01100011 01100011 00110101 01100110 00110111 00110000 00110110 00110000 00110110 00110101 01100101 01100001 01100100 00110011 01100100 00110100 01100110 01100110 00110111 00110110 00110011 00110111 00110100 00111001 00111001 00111001 00110000 00110001 00111001 01100001 01100010 01100101 00110011 00110010 00111001 01100011 01100110 01100101 00110011 00110010 01100011 01100011 00110010 00111000 00110110 00110001 01100001 00110111 00110110 00110101 01100010

這個字符串可以有空格。 沒關系。 我的問題是,如何用這個字符串乘以,假設,01100011? 乘數的長度是可變的,因此靈活性是必須的。

提前致謝!

只需使用BigInteger並指定基數:

BigInteger bigNumber = new BigInteger("101000101110...1010".replaceAll("\s+", ""), 2);

你會發現它支持像multiplyadd等算術運算。例如,在創建上面的變量之后,我們可以說:

BigInteger bigProduct = bigNumber.multiply(someOtherBigNumber);

假設我們已經創建了另一個BigInteger

編輯 :正如評論中指出的那樣,您需要刪除二進制字符串表示中的空格,這很容易 - 我已經更新了我的答案以包含此步驟。

最簡單的解決方案是使用BigInteger和基數2。

BigInteger multiply = new BigInteger("01100010...01100010", 2)
   .multiply(new BigInteger("01100011", 2));

System.out.println(multiply.toString(2));

相關問題:

下面使用帶基數的BigInteger進行實際算術,並以十進制和二進制形式輸出結果。

String s1 = "01100010 00110110 ...";
String s2 = "01100011";
s1 = s1.replaceAll(" ", "");
s2 = s2.replaceAll(" ", "");
BigInteger i1 = new BigInteger(s1, 2);
BigInteger i2 = new BigInteger(s2, 2);
BigInteger res = i1.multiply(i2);
System.out.println(res);
System.out.println(res.toString(2));

通過為二進制指定基數為2來使用BigInteger:

BigInteger num = new BigInteger(stringVar,2);  

這將另一個值乘以它:

BigInteger result = num.multiply(new BigInteger("01100011",2);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM