Java按位取反运算符“~”

Java 专栏收录该内容
36 篇文章 0 订阅

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

2013年07月16日 00:21:51 daokai1993 阅读数:1468 标签: 新手

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

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

负数的取反 就是在原码的基础上取反码  然后在取补码(补码=反码+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.

 

 

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

以上内容转自:https://blog.csdn.net/smilecall/article/details/42454471

  • 1
    点赞
  • 1
    评论
  • 3
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值