~取反的步骤应该是:
一、先由一个数的原码推出它的补码(原码与反码相互转化时符号位不用取反)
二、对补码进行按位取反(包括符号位也取反),取反后的数就是新补码
三、这个新补码是计算机存储用的,所以用这个新补码反推出原码才是我们能读懂的二进制数字。
------------------------------------------------------------
例如:
~5 = -6 的计算步骤:
一、先由一个数的原码推出它的补码
5的原码 = 反码 = 补码:0000...0101 正数的原反补码相同
二、对补码进行按位取反,取反后的数就是新补码
取反操作:1111...1010 按位取反的操作对象是补码,且符号位也会取反,取反后会变成新补码
三、补码是内存存储用的,所以用这个新补码反推出其原码才是我们能读懂的二进制数字。
补码:1111...1010
反码:1111...1001
原码:1000...0110 -----> -6
------------------------------------------------------------
再例如:
~(-3) = 2 的计算步骤:
-3的原码:1000...0011
-3的反码:1111...1100 原码转化为反码时,符号位不用取反
-3的补码:1111...1101 内存中存的是补码
取反操作:0000...0010 ------> 对3的补码取反得到新补码
由新补码的符号位可以看出,该数字是个正数,故其原反补码相同
所以,新补码 = 反码 = 原码:0000...0010 -----> 2
------------------------------------------------------------
快速求按位取反~:
原数字(正数)加一后再加负号
~1 = -2
~2 = -3
~3 = -4
~6 = -7
~9 = -10
原数字(负数)加一后再加负号
~(-1) = 0
~(-2) = 1
~(-3) = 2
~(-6) = 5
~(-9) = 8