我需要帮助编写一个使用int num并使用Java中的按位运算符将num的二进制补码作为int返回的方法。
public int twosComplement(int num) {
}
我能够使用字符串以及“ Integer.toBinaryString
”和“ Integer.parseInt
”编写方法,但是由于在将“ Integer.toBinaryString
”用于负数,结果字符串对于“ Integer.parseInt
”来说太长,我得到一个例外:
Exception in thread "main" java.lang.NumberFormatException: For input
string: "1111111111111100000001111111111111111111110000000"
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.base/java.lang.Integer.parseInt(Integer.java:652)
at java.base/java.lang.Integer.parseInt(Integer.java:770)
答案 0 :(得分:0)
最可能的原因是没有基数的Integer.ParseInt
将字符串视为十进制数。因此,您的“ 111,000,101,010,000”以数十亿(或任何其他金额)为单位进行处理。
需要传递2作为二进制文件。
int value = Integer.parseInt(binaryGuy, 2);
但是,如果设置了符号位(即负数)或可以使用Long.parseLong
或BigInteger (String s, int radix)