按位取反(~)
二进制数在内存中是以补码的形式存放的
1、原码、反码、补码
1.1、正数
- 原码:符号位0(代表+号),加上数字的二进制形式
- 正数原码、反码、补码相等
1.2、负数
- 原码:符号位1(代表-号),加上数字的二进制形式
- 反码:相对于原码符号位不变,数值位依次取反(0变1,1变0)
- 补码:相对于原码符号位不变,数值位依次取反,再加1(即补码=反码+1)
1.2、零
- 0有+0和-0两种形式,分别按照上面的计算即可
1 | |
为什么-0的补码是0000?

2、按位取反原理
- 对数字的补码(即内存中的存储形式),进行依次取反,得到取反后数字的补码,然后将补码转换为原码,再转为10进制数即为按位取反后的数值
示例(以四位二进制为例)
1 | |
按位取反(~)
https://hanqinu.github.io/2022/01/10/按位取反/