据我所知,当使用2的补码时,第一个数字是1,然后反转数字,找到新字节的值并将其设为negative.The javadoc说明Integer.parseInt(字符串s,基数)和Integer.valueOf(字符串s,基数)都应该返回一个带符号的整数对象,但是当我用下面的代码测试它时:
System.out.println(Integer.parseInt("10000001", 2));
System.out.println(Integer.valueOf("10000001", 2));我得到了:
129
129即使我的计算结果是-127。有趣的是,
System.out.println(Integer.parseInt("-10000001", 2));打印输出:
-129有没有人知道不同的java方法,如果你输入一个字节(基数= 2),那么这个方法将返回一个正确的有符号的值?
发布于 2013-03-15 01:02:06
如果它总是一个字节,那么下面的代码应该可以解决这个问题:
int i = Integer.parseInt("10000001", 2);
byte b = (byte) i;整数值将是129,但当您将其转换为字节时,它将更改为-127。
发布于 2013-03-15 00:57:57
所以你想
Integer.parseInt("1", 2) == -1?您可以始终将字符串解析为32位整数,如果值为128-255,则手动将其转换为负补码。
发布于 2013-03-15 00:56:56
Integer.parseInt(String s,int radix)
将字符串参数解析为第二个参数指定的基数中的有符号整数。字符串中的字符必须都是指定基数的数字(由Character.digit(char,int)是否返回非负值确定),但第一个字符可以是表示负值的ASCII减号'-‘('\u002D')。返回得到的整数值。
所以Integer.parseInt(“-some”,2)永远不会返回anyvalue,除非第一个字符不是'-‘。
https://stackoverflow.com/questions/15415478
复制相似问题