取反运算

188 阅读1分钟

计算机中数据的存储方式是补码
正数:原码 = 反码 = 补码
负数:反码 = 原码取反 补码 = 反码 + 1

取反运算(~操作符):对补码按位取反,包括符号位!!!

以5为例,做取反运算:
5的原码和补码都是 0000 0000 0000 0101
首先做取反,得到的是原码: 1111 1111 1111 1010
到这里其实取反运算已经完成,但是因为结果是负数,计算机存储数据的补码,所以还要计算负数的补码,负数的补码需要原码取反得到反码再加1
先取反得到:1000 0000 0000 0101
然后加1: 1000 0000 0000 0110
最终结果为-6

以-5为例,做取反运算:
-5的原码是:1000 0000 0000 0101 -5在计算机中存储的方式是补码,其补码要先取反再加1:
先取反:1111 1111 1111 1010
加1: 1111 1111 1111 1011
得到-5的补码,现在做取反运算:
结果得到的是原码:0000 0000 0000 0100
结果为正数,正数的补码就是原码,所以结果为4

注意:
1、做取反运算,对操作数按位取反,包括符号位,而对原码取反得到反码时,符号位不变
2、计算机存储的是补码,取反运算得到的是原码,如果结果是负数,还要再转成补码存储