要解决此类问题:
准备, 真值,原码,反码,补码,移码,及其相互转换,自行Google。
第一,要明白整数是如何在计算机中存储的,也就是-5在内存中的二进制串是什么?
- 真值就是具有现实意义的数字,在本例中就是
-5
,和等于几
的那个几
。 - 计算机存储真值的补码,位运算作用在补码上。
-5
的补码为1111 1111 1111 1111 1111 1111 1111 1011
。
第二,~单目运算符对-5对应的二进制串进行了怎样的操作?
- ~对-5的补码每一位都进行了取反操作,结果为
0000 0000 0000 0000 0000 0000 0000 0100
也是一个补码。
第三,操作后的二进制串对应的真值是多少?
- 因为第二步得出的二进制补码最高位是0,所以其是个正数,对应的真值是4。
也就是说~(-5)在java中等于4。