按位取反简单易懂
前提:计算机底层都是以补码的形式存储。
正数
以1为例:
- 1的二进制原码:0000 0001(原码反码补码三码一致)
1按位取反计算流程 -->
补码 0000 0001(以补码存储)
↓
取反 1111 1110(即为负数的补码)
↓
减1 1111 1101 → 取反 1000 0010(负数补码反推原码)
↓
结果为:-2
负数
以-1为例:
- -1 的二进制原码:1000 0001 转为补码(取反+1):1111 1111
-1按位取反计算流程 -->
补码 1111 1111
↓
取反 0000 0000(即为正数的补码,正数三码一致)
↓
结果为:0
总结
正数按位取反:- 要取反正数-1
负数按位取反:-(要取反负数+1)