【问题标题】:Converting binary to decimal and flipping 0 and 1 JAVA将二进制转换为十进制并翻转 0 和 1 JAVA
【发布时间】:2017-06-18 10:37:15
【问题描述】:
    public static int reverseIntBitwise(int value) {
    String res = String.format("%32s", 
    Integer.toBinaryString(value)).replace(' ', '0');

    char[] charArray = res.toCharArray();
    for(int i=0; i<charArray.length; i++){
        if(charArray[i] == '0'){
            charArray[i]='1';
        }else if(charArray[i]=='1'){
            charArray[i]='0';
        }
    }
    String res2 = new String(charArray);
    return Integer.parseInt(res2, 2);
}

所以 res = 00000000000000000000000000101110 而 res2 = 11111111111111111111111111010001

但是当我尝试将其转换回 int 时,它会显示在控制台中:

Exception in thread "main" java.lang.NumberFormatException: For input string: "11111111111111111111111111010001"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:583)
    at com.company.Main.reverseIntBitwise(Main.java:169)
    at com.company.Main.main(Main.java:150)

谁能帮忙解决这个问题? 谢谢

【问题讨论】:

    标签: java binary parseint


    【解决方案1】:

    您得到NumberFormatException,因为结果数字4294967249 超出Integer 的范围(即大于Integer.MAX_VALUE)。你可以试试BigInteger,例如:

    String res2 = "11111111111111111111111111010001";
    System.out.println(new BigInteger(res2, 2));
    

    【讨论】:

    • Long.parseLong()
    • @Eran 是的,绝对的!
    【解决方案2】:

    二进制11111111111111111111111111010001 的十进制数会溢出整数数据类型。

    使用长。

    【讨论】:

      猜你喜欢
      • 2013-01-24
      • 1970-01-01
      • 1970-01-01
      • 2017-01-03
      • 2020-04-03
      • 2015-06-02
      • 2011-07-09
      • 2012-06-26
      • 2011-09-04
      相关资源
      最近更新 更多