~取反运算
例子:
正数取反运算
15:0000 0000 0000 0000 0000 0000 0000 1111
取反运算(得到的是补码):1111 1111 1111 1111 1111 1111 1111 0000
转原码:
1111 1111 1111 1111 1111 1111 1111 0000
-1
1111 1111 1111 1111 1111 1111 1110 1111
取反得原码(符号位不变):1000 0000 0000 0000 0000 0000 0001 0000
得 -16
负数取反运算(负数在计算机中以补码形式存储)
-15:1000 0000 0000 0000 0000 0000 0000 1111
转原码:
1000 0000 0000 0000 0000 0000 0000 1111
-1
1000 0000 0000 0000 0000 0000 0000 1110
取反得原码(符号位不变):1111 1111 1111 1111 1111 1111 1111 0001
取反运算:0000 0000 0000 0000 0000 0000 0000 1110
得 14
所以,在转原码的取反操作时,符号位不变,这次取反不是取反运算
取反运算是直接对原码进行的
正数是先直接取反运算,再转原码取值。
负数是先转原码,在进行取反运算取值。
简便方法
也可以用适合人类运算的计算方法:
如对 a 按位取反,则得到的结果为 -(a+1) .
此条运算方式对正数负数和零都适用。
参考:https://www.cnblogs.com/shuaiding/p/11124974.html
你学废了吗?