首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java - Integer.parseInt()在radix=2时不返回负数

Java - Integer.parseInt()在radix=2时不返回负数
EN

Stack Overflow用户
提问于 2013-03-15 00:54:24
回答 5查看 7.6K关注 0票数 2

据我所知,当使用2的补码时,第一个数字是1,然后反转数字,找到新字节的值并将其设为negative.The javadoc说明Integer.parseInt(字符串s,基数)和Integer.valueOf(字符串s,基数)都应该返回一个带符号的整数对象,但是当我用下面的代码测试它时:

代码语言:javascript
复制
System.out.println(Integer.parseInt("10000001", 2));

System.out.println(Integer.valueOf("10000001", 2));

我得到了:

代码语言:javascript
复制
129

129

即使我的计算结果是-127。有趣的是,

代码语言:javascript
复制
System.out.println(Integer.parseInt("-10000001", 2));

打印输出:

代码语言:javascript
复制
-129

有没有人知道不同的java方法,如果你输入一个字节(基数= 2),那么这个方法将返回一个正确的有符号的值?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-03-15 01:02:06

如果它总是一个字节,那么下面的代码应该可以解决这个问题:

代码语言:javascript
复制
int i = Integer.parseInt("10000001", 2);
byte b = (byte) i;

整数值将是129,但当您将其转换为字节时,它将更改为-127。

票数 7
EN

Stack Overflow用户

发布于 2013-03-15 00:57:57

所以你想

代码语言:javascript
复制
Integer.parseInt("1", 2) == -1?

您可以始终将字符串解析为32位整数,如果值为128-255,则手动将其转换为负补码。

票数 2
EN

Stack Overflow用户

发布于 2013-03-15 00:56:56

Integer.parseInt(String s,int radix)

将字符串参数解析为第二个参数指定的基数中的有符号整数。字符串中的字符必须都是指定基数的数字(由Character.digit(char,int)是否返回非负值确定),但第一个字符可以是表示负值的ASCII减号'-‘('\u002D')。返回得到的整数值。

所以Integer.parseInt(“-some”,2)永远不会返回anyvalue,除非第一个字符不是'-‘。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15415478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档