1.原码,反码,补码计算规则
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200911151627113.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMTk4Njk3,size_16,color_FFFFFF,t_70#pic_center)
2.~ 按位非运算符技巧:(如果位为0,结果是1,如果位为1,结果是0.)
System.out.println(~ (-2));
分析:1.(正数(首位为0)的原反补码都一样)
2.(负数(首位为1)的 反码:符号位不变, 后面取反 补码:反码基础上加1)
例如: 原码:1000 0010 (-2)
反码:1111 1101
补码:1111 1110
~(-2)的补码:(-2)补码取反 0000 0001 由于符号位为0(正数的原反补码一样), 所以~(-2)的原码为0000 0001 (等于十进制1)
情况1:(求出补码首位为1(正数的原,反,补码都一样))
step1 -> -2原码:1000 0010
step2 -> -2反码:1111 1101
step3 -> -2补码:1111 1110
step4 -> 对-2的补码进行取反即可得到~(-2)的补码
step5 -> ~(-2)补码:0000 0001
step6 -> 由于符号位为0表示正数,因此补码和源码一样。转换为十进制就是1
情况2:求出补码为首位1(得将补码还原成原码)
假如符号位为1则得先将补码转换成反码,再转换成原码
例如:
原码:0000 0110 (6)
反码:0000 0110
补码:0000 0110
~(6)补码:1111 1001
~(6)反码:1111 1000
~(6)原码:1000 0111 (-7)