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

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

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,忽略负号

 

  • 15
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值