Finding 1's complement

user2913004 picture user2913004 · Oct 26, 2013 · Viewed 16.2k times · Source

I am trying to make a program to calculate 1's complement after entering a binary number. This is what I have to far:

import java.util.Scanner;
public class BitWiseComplement {
    public static void main(String[] args) {
        Scanner keysIn = new Scanner(System.in);
        System.out.println("Please enter your number: ");
        long originalNum = keysIn.nextLong();
        System.out.println(~originalNum);
  }
}

However, when I enter 0111011, I get -111012. I thought the ~ operator was supposed to invert the number so that all 0s are 1s and all 1s are 0s.

Any help?

Answer

arshajii picture arshajii · Oct 26, 2013

You presumably want to work in binary, so try:

Scanner keysIn = new Scanner(System.in);
System.out.print("Please enter your number: ");

long originalNum = keysIn.nextLong(2);  // specify radix of 2
System.out.println(Long.toBinaryString(~originalNum));  // print binary string

keysIn.close();
Please enter your number: 0111011
1111111111111111111111111111111111111111111111111111111111000100

As you can see, all bits are flipped. Bear in mind that there are leading 0s in front of the binary number you entered.