使用java从32位二进制补码转换为十进制

时间:2014-11-25 03:56:20

标签: java

我在查找从32位二进制补码二进制数转换为java中十进制数的方法时遇到了麻烦。我得到一个溢出错误,或者当它应该是负数时,数字会出现非负数。

String bin = "11111111111111111111111111111110";
long foo = Long.parseLong(bin);
System.out.println(foo);

这是我尝试的事情之一,我认为我需要长时间使用,因为它可以容纳64位。任何帮助都会很棒。感谢

3 个答案:

答案 0 :(得分:2)

如果要解析二进制值,则需要提供两个基数或基数。

long foo = Long.parseLong(bin, 2);

您可以在Java doc page上看到一个示例:

  

parseLong("1100110", 2)返回102L

如果没有基数,则使用base-10,而1032将不适合long

请记住,对于32个字符的位字符串,这将为您提供 unsigned 变体。如果您想在long中使用已签名的变体,则可以使用:

if (foo > 0x7fffffffL) foo = -(0x100000000L - foo);

之后调整它

如果合适,你可以强行将它强制转换为整数:

int foo = (int)Long.parseLong(bin,2);

Integer.parseInt()被赋予签名号码的要求意味着它不适合32字符二进制字符串,最左边的1位。

答案 1 :(得分:0)

radix是使用过的编号系统的基础。

public static void main(String[] args) {
        int bits = (int) Long.parseLong("11111111111111111111111111111110", 2);
        System.out.println(bits);
    }

<强>输出

-2

答案 2 :(得分:0)

你是对的 - 在这种情况下你需要使用“长”。

由于你正在进行二次补码(不是补码),你可以使用“parseLong()”,基数为“2”:

public class X {

  public static void main (String[] args) {
    String bin = "11111111111111111111111111111110";
    int i = (int)Long.parseLong(bin, 2);
    System.out.println("parseInt(" + bin + ", 2)=" + i);
  }

}
// Output:
parseInt(11111111111111111111111111111110, 2)=-2