java - 尝试打印 32 位二进制数的反转时出现 NumberFormatException

标签 java binary decimal numberformatexception

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

x = 3, 00000000000000000000000000000011 => 11000000000000000000000000000000

return 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);
    }
}

最佳答案

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

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

关于java - 尝试打印 32 位二进制数的反转时出现 NumberFormatException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35016570/

相关文章:

java - CORS 策略不起作用,因为所有响应 header 均已设置,但仍然出现此错误

javascript - 为什么这些二进制表示会产生相同的数字?

objective-c - 在 objective-c 中使用 NSDecimalNumber

objective-c - 在 Objective-C 中处理大数字?

java - 非法前向引用,对象可见性问题将编译

java - 使用类加载器 AntClassLoader 无法找到 Taskdef 类 com.temp.install.common.action.UserInstallDirRule

在另一个类中使用比较器对对象进行Java数组二进制搜索

memory - 技嘉还是 Gibibyte(1000 或 1024)?

java - 我需要能够捕获小数点后仅 2 位数字的小数 java,尝试了这个

java - Android TabView 错误?