Java - Integer.parseInt() not returning a negative number when radix=2

binary, java, parseint

Solution

If it's always going to be a byte, then this should do the trick:

int i = Integer.parseInt("10000001", 2);
byte b = (byte) i;

The integer value will be 129, but when you cast it to a byte it will change to -127.

Problem

As far as I know, when using 2's complement, and the first number is a 1, then you flip the numbers and find the value of the new byte and make it a negative.The javadoc says that Integer.parseInt(String s, radix) and Integer.valueOf(String s, radix) both should return a signed integer object, but when I test it out with this: ``` System.out.println(Integer.parseInt("10000001", 2)); System.out.println(Integer.valueOf("10000001", 2)); ``` I get: ``` 129 129 ``` even though my calculations get me -127. Whats interesting is that ``` System.out.println(Integer.parseInt("-10000001", 2)); ``` prints out: ``` -129 ``` Anyone know of a different java method that if you input a byte (and radix = 2), then the method will return a correctly signed value?

Original source