按位取反运算符 ~: 一元运算符,对应的二进制位,0变为1,1变为0。
分析:
由于负数的原码,补码,反码不同
因此将要进行计算:
补码—>反码—>原码
原码—>反码—>补码
原码二进制位全部将将1变为0,0变为1,得到反码
反码+1得到补码(反码加的1位最右位的1)
例如:
正数:
Int a=15
设a=15为a1
此时a1的原码为:0……0,0……0,0……0,00001111
因为a1为正数(正数的补码,反码,原码相同),因此进行取反运算:
设~a为a2,
因此得:a2的原码为:1……1,1……1,1……1,11110000
所以a2的反码为:1……0,0……0,0……0,00001111
补码=反码+1:所以a2的补码:1……0,0……0,0……0,00010000(二进制逢二进一)
所以a2=-16
负数:
在使用~计算负数时,由于在计算机中,负数的补码,反码,原码不同,因此首先将操作数的值计算为补码,再进行取反运算;
Int a=-15;(a=-15为原码);(在计算机中负数以补码的形式存在)
此时,首先进行从原码到补码的计算:
原码为-151:……1,1……1,1……1,00001111
反码:1……1,1……1,1……1,11110000(将原码换算为反码:将原码的值取相反数,1变0,0变1)
补码:补码=反码+1:1……1,1……1,1……1,11110001
此时进行取反运算(包括符号位也要变):0……0,0……0,0……0,00001110:14
所以
~a=14;
取反运算符公式:
n=-(n+1)
时刻牢记计算机中二进制以补码的形式存在



