二进制补码法

时间:2018-11-08 03:44:16

标签: java bitwise-operators twos-complement

我需要帮助编写一个使用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)

1 个答案:

答案 0 :(得分:0)

最可能的原因是没有基数的Integer.ParseInt将字符串视为十进制数。因此,您的“ 111,000,101,010,000”以数十亿(或任何其他金额)为单位进行处理。

需要传递2作为二进制文件。

int value = Integer.parseInt(binaryGuy, 2);

但是,如果设置了符号位(即负数)或可以使用Long.parseLongBigInteger (String s, int radix)

,请注意Integer.MAX_VALUE。