• 0

[java]Converting integer to signed binary?


Question

9 answers to this question

Recommended Posts

  • 0
  Quote
String s = Integer.toString(i,2); // the 2 is what converts it to binary

System.out.println(s);

That still doesn't work because the function does not handle negative numbers. It instead puts a '"-" sign in front of the string.

  • 0

When I learned to convert integers to their 2's complement notation, I was taught to reverse the bits then add 1.

So could you do the following:

1) take an integer and convert it to bytes

2) go through each bit and reverse them (0->1 and 1->0)

3) add 1 to this "flipped bit" number

4) your result is that number in 2's complement notation

Now I realise there are probably much easier methods available to do this, this is just my first thoughts on the subject

  • 0
  Quote
Integer.toBinaryString()

"For negative numbers it will return a 32 bit two's compliment representation of that number."

Where does it say that? I'm looking at the java.sun.com API specification and this is what is said
  Quote
Returns a string representation of the integer argument as an unsigned integer in base 2.

The unsigned integer value is the argument plus 232 if the argument is negative; otherwise it is equal to the argument. This value is converted to a string of ASCII digits in binary (base 2) with no extra leading 0s. If the unsigned magnitude is zero, it is represented by a single zero character '0' ('\u0030'); otherwise, the first character of the representation of the unsigned magnitude will not be the zero character. The characters '0' ('\u0030') and '1' ('\u0031') are used as binary digits.

Nowhere does it says it will return a 32 bit two's complement representation! Can you tell me where you got that?

  • 0

Google Groups

class Test{
 public static void main(String args[]){
  System.out.println(Integer.toBinaryString(1));
  System.out.println(Integer.toBinaryString(-1));
  System.out.println(Integer.toBinaryString(256));
  System.out.println(Integer.toBinaryString(-256));
  System.out.println(Integer.toBinaryString(0));
  System.out.println(Integer.toBinaryString(31337));
  System.out.println(Integer.toBinaryString(-31337));
 }
}

C:\>javac Test.java

C:\>java Test
1
11111111111111111111111111111111
100000000
11111111111111111111111100000000

111101001101001
11111111111111111000010110010111

C:\>

As advertized, gives the 32-bits 2-complement when used with negative numbers.

  • 0

They just use different words to explain the 2-complement.

"The unsigned integer value is the argument plus 2^32 if the argument is negative; otherwise it is equal to the argument."

ie if the argument you pass to toBinaryString() is negative, it does += 2^32 before converting it to binary... which is exactly what a 2-complement is.

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.