Java: What does ~ mean
Solution 1:
The Tilde (~
) performs a bitwise complement of a numerical value in Java.
See: Bitwise complement (~
): inverts ones and zeroes in a number
Solution 2:
It is the Unary ~ Bitwise complement operator (quoting) :
- only used with integer values
- inverts the bits ie a 0-bit becomes 1-bit and vice versa
- in all cases ~x equals (-x)-1
See also this page on Bitwise operators on wikipedia, which states :
The bitwise NOT, or complement, is a unary operation that performs logical negation on each bit, forming the ones' complement of the given binary value. Digits which were 0 become 1, and vice versa.
For example:
NOT 0111 (decimal 7)
= 1000 (decimal 8)
In many programming languages (including those in the C family), the bitwise NOT operator is "
~
" (tilde).
Solution 3:
From Java's website http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html
The unary bitwise complement operator "~" inverts a bit pattern; it can be applied to any of the integral types, making every "0" a "1" and every "1" a "0". For example, a byte contains 8 bits; applying this operator to a value whose bit pattern is "00000000" would change its pattern to "11111111".
Now, as previously answered by Pascal MARTIN, at any given case the value equals to -(x)-1. E.g. ~2=-3, ~-6=5, etc.
Also, in java all positive integers are stored as their binary representations and negative integers are stored in 2's compliment value of a positive integer.
Now, let's see how it works in bit level in case of ~2=-3:
Initially, 2 is stored in its binary representation:
0000 0000 0000 0010
Now ~2 will result in the value (inverse the bits):
1111 1111 1111 1101
How in the world I know it is -3? Well, it is -3 because it is derived from 2's compliment representation of 3.
As we know 2's(x)= 1's(x) + 1 (https://delightlylinux.wordpress.com/2014/10/13/binary-lesson-12-ones-complement-and-twos-complement/)
Our aim is it to find x:
1's(x)= 2's(x) - 1 (based on previous expression)
As our answer is in is in 2's compliment,
1's(x)= 1111 1111 1111 1101 - 0000 0000 0000 0001
1's (x)= 1111 1111 1111 1100
(How to subtract -http://sandbox.mc.edu/~bennet/cs110/pm/sub.html)
Therefore x= 1's compliment of value (as the answer we got represents 1's compliment of x).
x = 0000 0000 0000 0011
So, we have found that x is 3 and hence our previous result of ~ operator 1111 1111 1111 1101
is -3 written as 2's compliment of 3.