问个问题,以下代码,输出多少?其中 ~ 为Java中位运算符中的取反运算符。
int i = 0;
System.out.println( ~i );
正确答案:
-1 。
因为变量i为int类型,Java中int类型4个字节(4Byte),也就是32位(32bit)。
表示为二进制:
(+0):0000 0000 0000 0000 0000 0000 0000 0000
(-0 ):1000 0000 0000 0000 0000 0000 0000 0000
+0:
原码:0000 0000 0000 0000 0000 0000 0000 0000
反码:0000 0000 0000 0000 0000 0000 0000 0000
补码:0000 0000 0000 0000 0000 0000 0000 0000
-0:
原码:1000 0000 0000 0000 0000 0000 0000 0000
反码:1111 1111 1111 1111 1111 1111 1111 1111
补码:0000 0000 0000 0000 0000 0000 0000 0000
可以看出,无论是+0还是-0,他们的补码都是一样的。
因为计算机中存储的是补码,所以变量 i 的存储结果为:
补码:0000 0000 0000 0000 0000 0000 0000 0000
现在对其进行按位取反运算(~),结果为:
补码:1111 1111 1111 1111 1111 1111 1111 1111
电脑显示给我们的是原码,补码转原码,结果为:
原码:1000 0000 0000 0000 0000 0000 0000 0001
二进制转十进制,结果为:
十进制: -1
上述过程中,如果有不会原码转补码,补码转原码的,请自行百度,这里不赘述了。
作业:
~-8等于多少?
正确答案: 7 。
自己走一遍过程吧。