美文网首页安卓面试宝典Java
Java篇—取反(~)操作符的应用及理解

Java篇—取反(~)操作符的应用及理解

作者: itbird01 | 来源:发表于2022-02-04 11:22 被阅读0次

话不多说,先给大家上一个代码:

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。

通过上述分析,小伙伴们的福利来了~

取反操作符(~)结论总结:

当n为正数时,~(n) = -(n+1)

当n为负数时,~(-n) = n - 1,忽略负号

相关文章

网友评论

    本文标题:Java篇—取反(~)操作符的应用及理解

    本文链接:https://www.haomeiwen.com/subject/aogdkrtx.html