Java按位取反运算符“~”

关于学习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

猜你喜欢

转载自blog.csdn.net/b1480521874/article/details/84982944