加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Integer.parseInt(x,2)不考虑符号位

发布时间:2020-12-15 04:29:04 所属栏目:Java 来源:网络整理
导读:参见英文答案 Java two’s complement binary to integer ????????????????????????????????????2个 在执行Integer.parseInt(x,2)时,它不考虑符号位. 举个例子, System.out.println(Integer.toBinaryString(-1)); // This output's "22222222222222222222222
参见英文答案 > Java two’s complement binary to integer ????????????????????????????????????2个
在执行Integer.parseInt(x,2)时,它不考虑符号位.

举个例子,

System.out.println(Integer.toBinaryString(-1)); // This output's "22222222222222222222222222222211"
System.out.println(Integer.parseInt(Integer.toBinaryString(-1),2));

第二行抛出,

Exception in thread "main" java.lang.NumberFormatException: For input string: "22222222222222222222222222222211"
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at com.Test.main(Test.java:116)

我有一个场景将Integer转换为二进制字符串,然后将其转换回来.

有没有办法让parseInt()方法用符号位解析它?

编辑:

this问题中的答案有一个hacky解决方案,可以在更大的数据类型上使用parseXX()方法(例如:需要short时使用Integer.parseInt(),或者需要int时使用Long).如果有人试图解析一个负长的(因为没有比长的更大的类型),这不会工作.

但@ Tagir的答案似乎适用于所有类型.所以请保持这个问题.

解决方法

从Java 8开始,您可以使用 Integer.parseUnsignedInt(s,2);

System.out.println(Integer.parseUnsignedInt(Integer.toBinaryString(-1),2));

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读