3358 www.Sina.com/http://www.Sina.com /一元运算符,对应的二进制位,0等于1,1等于0。
按位取反运算符 ~
由于负数的原码、补码、反码不同
因此,进行计算。
补全码-反码-原始码
原码-反码-补全码
原码的二进制位都将1变为0,0变为1,得到反码
反转1得到补数(反转加法的1位的最右位的1 ) )。
例如:
:
Int a=15
设a=15为a1
此时的a1的源代码为0……0,0……0,0……0,0000111
a1是正数(正补数、反符号、原符号相同),因此进行反运算:
如果将~a设为a2,
因此,a2的原代码为1……1、1……1、1……1、1110000
所以a2的反码是,1……0,0……0,0……0,000111
补数=反码1 :所以,a2的补数: 1……0,0……0,0……0,00010000 (二进制都是二进制1 ) )。
所以a2=-16
分析:
使用~计算负数时,在计算机中,由于负数的补数、反码、原码不同,首先将操作数的值作为补数进行计算,进行逆运算;
Int a=-15; (a=-15为源代码); (在计算机中负数以补数的形式存在)
此时,首先进行从源代码到补数的计算。
原码是-151:……1、1……1、1……1,0000111
反符号: 1……1、1……1、1……1、11110000 (将原符号换算为反符号:将原符号的值取反,将1变为0、0变为1 ) ) )。
补数(补数) 1……1、1……1、1……1、1110001
此时,包括符号位在内进行逆运算。 0……0,0……0,0……0,0001110:14
所以呢
~a=14;
正数:
负数:
取反运算符公式: