Search code examples
javascjp

How do I calculate negation(~) of -5


public class UnaryOperator {
    public static void main(String[] args) {
        byte a= -5;
        System.out.println(~a); // prints 4
    }
}

When I do it manually, I get the answer as 6.

Here is how I did it:

128 64 32 16 8 4 2 1
 0  0  0  0  0 1 0 1

As it is a negation I inverted it to the following:

         128 64 32 16 8 4 2 1
          0  0  0  0  0 1 0 1
    sign -1  1  1  1  1 0 1 0

-----------------------------
             0  0  0  0 1 0 1
add one-->   0  0  0  0 0 1 1  

------------------------------
             0  0  0  0 1 1 0 = 6   
------------------------------

I know there's something wrong with what I am doing but I am not able to figure it out.


Solution

  • 5 is 00000101
    -5 is 11111010+00000001 = 11111011
    ~(-5) is 00000100
    so you get 4.