Java的转换负二进制回整(Java converting negative binary back

2019-09-29 05:34发布

我想一个十进制数转换为基体2回基地10.仅适用于正argument_decimal

argument_binary = Integer.toBinaryString(argument_decimal);
back_converted_argument_decimal = Integer.valueOf(argument_binary, 2);

对于argument_decimal beeing负,我得到“java.lang.NumberFormatException:对于输入字符串:‘11111111111111111111111111111111’”

编辑:这是我做的:

latitude_binary = Integer.toBinaryString((int)(latitude_decimal * 1000000));   
back_converted_latitude_decimal =  Long.parseLong(latitude_binary, 2) / 1000000.0;

这给了我喜欢-1.1坏的结果是来回转换为4293.867296

Answer 1:

尝试通过长走:

String binary = Integer.toBinaryString(-1);
long l = Long.parseLong(binary, 2);
int i = (int) l;

经测试,和工作。

为什么这个工作原理是,因为-1被表示为在系统存储器32个中位1的序列。 当使用toBinaryString方法,它创建使用该确切表示的字符串。 但是,一个32个比特实际上等于2 ^ 32 - 1。即对于一个int(4个字节)过大时,因为一个int从[-2 ^ 31,2 ^ 31-1]熄灭。 这是因为最左边位表示符号。 因此,要解决这个溢出,首先解释1个0字符作为一个长期的该序列。 长这样做,因为很长一段的最大值为2 ^ 63-1。 然后就是漫长的转换为int。 这是通过简单地把低32位来完成。


在你的代码的错误是,你没有投中的Long.parseLong为int。 所以这应该工作:

lat_bin = Integer.toBinaryString((int)(lat_dec * 1000000));   
lat_dec_conv =  ((int) Long.parseLong(lat_bin, 2)) / 1000000.0;


Answer 2:

 public static void convertStringToDecimal(String binary) {
    int decimal = 0;

    int power = 0;

    if (binary.charAt(0) == '1' && binary.length() == 32) {

        StringBuilder builder = new StringBuilder();

        for (int i = 0; i < binary.length(); i++) {

            builder.append((binary.charAt(i) == '1' ? '0' : '1'));

        }

        while (binary.length() > 0) {

            int temp = Integer
                    .parseInt(builder.charAt((binary.length()) - 1)+"");
            decimal += temp * Math.pow(2, power++);
            binary = binary.substring(0, binary.length() - 1);

        }

        System.out.println((decimal + 1) * (-1));

    } else {

        while (binary.length() > 0) {
            int temp = Integer
                    .parseInt(binary.charAt((binary.length()) - 1) + "");
            decimal += temp * Math.pow(2, power++);
            binary = binary.substring(0, binary.length() - 1);
        }

        System.out.println(decimal);

    }
}


文章来源: Java converting negative binary back to integer