从Java网站http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html
一元按位补数运算符“〜”反转位模式;它可以应用于任何整数类型,每个“ 0”为“ 1”,每个“ 1”为“ 0”。例如,一个字节包含8位。如果将此运算符应用于位模式为“ 00000000”的值,则会将其模式更改为“ 11111111”。
现在,正如Pascal MARTIN先前回答的那样,在任何给定情况下,vlaue等于-(x)-1。例如〜2 = -3,〜-6 = 5等
同样,在Java中,所有正整数都存储为它们的二进制表示形式,而负整数则存储在2的正整数补码值中。
现在,让我们看看在〜2 = -3的情况下它如何在位级别工作:
最初,2以其二进制表示形式存储:
0000 0000 0000 0010
现在〜2将得出值(位反转):
1111 1111 1111 1101
我怎么知道它是-3?好吧,它是-3,因为它是从2的3的恭维表示得出的。
我们知道2's(x)= 1's(x)+1(https://delightlylinux.wordpress.com/2014/10/13/binary-lesson-12-ones-complement-and-twos-complement/)
我们的目标是否找到x:
1's(x)= 2's(x)-1(根据之前的表达式)
因为我们的答案是2的恭维,所以
1的(x)= 1111 1111 1111 1101 - 0000 0000 0000 0001
1的(x)= 1111 1111 1111 1100(如何减去-http: //sandbox.mc.edu/~bennet/cs110/pm/sub.html)
因此x = 1的价值的恭维(因为我们得到的答案代表1对x的恭维)。
x = 0000 0000 0000 0011
因此,我们发现x为3,因此〜运算符的先前结果1111 1111 1111 1101为-3,表示为2对3的补数。