关于学习java中的按位取反(~)的问题

之前不知道按位取反到底是怎么计算的

百度谷歌的半天    也没有什么具体的计算防暑    后来自己琢磨了一会儿 发现了一点按位取反的技巧  在此分享一下

负数的取反 就是在原码的基础上取反码  然后在取补码(补码=反码+1)当反码的最后一位数已经为1的时候    补码再+1后就应该向前进一位

例如十进制数: -6    -6在java中的原码为10000000 00000000 00000000 00000110   其反码为11111111 11111111 11111111 11111001 

所以-6的补码就是11111111 11111111 11111111 11111010   再将补码取反就是~(-6)的二进制数:00000000 00000000 00000000 00000101 转换为10进制就是5.

正数的原码=补码=反码

正数的按位取反其实可以参照负数

其计算方式可以按负数的逆思路直接推出

比如说一个十进制数:5

5的原码、反码、补码全部都是00000000 00000000 00000000 00000101   

那么先将5的二进制数取反,并得到:11111111 11111111 11111111 11111010(把它看做是某个数的补码)

然后再将得到某个数的补码(姑且称之为补码吧)-1

就得到反码:11111111 11111111 11111111 11111001(因为补码最后一位数为0  所以往前一位“借数”,所以最后一位数为1)

最后将反码译为原码:10000000 00000000 00000000 00000110   所以~(5)就为-6.



注:以上纯属本人在探索过程中的个人理解,如果错误,希望大神指出!谢谢!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值