话不多说,先给大家上一个代码:
public class TestDemo {
public static void main(String[] args) {
int a = 10;
int b = 5;
System.out.println(a+~b);
}
}
运行结果是多少? 5? 15?
实践是检验真理的唯一标准。上述代码的真实输出如下:
惊讶吗?下来由笔者给大家解惑:
理解取反操作符(~)要先了解的理论:
1.在计算机中,所有数据的表示方式都是以补码的方式存在;
2.正数:符号位为0,原码,反码,补码相同;
3.负数:符号位为1,补码 = 反码 + 1。
正数取反解析:
step 1:先求得该数的原码;
step 2:原码取反得到答案原码;
step 3:答案原码转为补码,最后化为数值。
负数取反解析:
step 1:先求得该数的原码;
step 2:再求得该数的补码;
step 3:补码取反得到答案补码,最后化为数值。
举例说明:
(1)、~5 = -6过程解析
step 1:表示5的原码
5的原码为:00000000 00000000 00000000 00000101。
step 2:对5的原码取反
得到答案的原码:11111111 11111111 11111111 11111010
step 3:将答案的原码转成补码
通过原码得到反码:10000000 00000000 00000000 00000101
补码 = 反码 + 1:
答案的补码为:10000000 00000000 00000000 00000110
得到值:-6
前文中的答案4就是依此而来,10 + ~5 即为 10 + (-6)= 4。
(2)、~(-3) = 2过程解析
step 1:表示-3
-3的原码:10000000 00000000 00000000 00000011
-3的反码:11111111 11111111 11111111 11111100
-3的补码 = 反码 + 1:11111111 11111111 11111111 11111101
step 2:对-3的补码取反操作
得到答案的补码:00000000 00000000 00000000 00000010
因为首位,即符号位为0,所以是正数,原码 = 反码 = 补码
因此答案是2。
网友评论