美文网首页安卓面试宝典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