尝试打印32位二进制数的反向时的NumberFormatException

时间:2016-01-26 14:45:25

标签: java binary decimal numberformatexception

我正在尝试以十进制格式打印32位二进制数的反转: 例如:

  

x = 3,             00000000000000000000000000000011   => 11000000000000000000000000000000

     

返回3221225472

我得到一个数字格式例外,有人可以帮我解决我的代码中的错误吗?感谢您的帮助。

public class ReverseBinary {

    public long reverse(long a) {

        String s1 = String.format("%32s", Long.toBinaryString(a)).replace(' ', '0');
        StringBuilder sb = new StringBuilder(s1);
        String s = sb.reverse().toString();

        long c = Integer.parseInt(s, 2);

        return c;
    }

    public static void main(String args[]) {
        ReverseBinary rb = new ReverseBinary();

        long ans = rb.reverse(3);

        System.out.println(ans);
    }
}

3 个答案:

答案 0 :(得分:4)

您的变量c可能是一个长变量,但Integer.parseInt(s,2)传递的值仍然是整数。此调用尝试解析导致问题的整数值,因为该值明显超出整数范围。

只需将Integer.parseInt(s,2)替换为Long.parseLong(s, 2)

答案 1 :(得分:1)

应该是

long c= Long.parseLong(s,2);

答案 2 :(得分:0)

如果你想要一个与反转位模式相对应的有符号整数:有一种方法可以做到这一点。

public class Test
{
    public static void main (String[] args)
    {
        // 000...001 -> 100...000, interpret as two's complement 32bit int
        int reversed = Integer.reverse(0b0_00000000_00000000_00000000_00000001);
        System.out.println(reversed == Integer.MIN_VALUE); // -> true
    }
}