之前不知道按位取反到底是怎么计算的
百度谷歌的半天 也没有什么具体的计算防暑 后来自己琢磨了一会儿 发现了一点按位取反的技巧 在此分享一下
负数的取反 就是在原码的基础上取反码 然后在取补码(补码=反码+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.
注:以上纯属本人在探索过程中的个人理解,如果错误,希望大神指出!谢谢!