基础背景
首先我们需要知道以下前提:
1. 原码:一个数字的二进制结果。
例如:
+10 : 0000 1010
-7 : 1000 0111
2. 原码、反码、补码:
正数:原反补码全部一样。
负数:
反码=原码符号位(最左边一位为符号位)不变,其他各位取反。
补码=反码+1,符合位不变。
例如:
+10(原码): 0000 1010
+10(反码): 0000 1010
+10(补码): 0000 1010
-7(原码): 1000 0111
-7(反码): 1111 1000
-7(补码): 1111 1001
位非~ :对补码各位取反,包括符号位
遵循一个规则:
原码1—>反码1—>补码1—>补码2—>反码2—>原码2
(补码1–>补码2 的过程就是位非~,即各位取反,包括符号位)
例如:
+10(原码): 0000 1010
+10(反码): 0000 1010
+10(补码): 0000 1010
~(+10)(补码): 1111 0101 (符号位为1,负数,采用负数的原反补规则)
~(+10)(反码): 1111 0100 (反补+1,补反-1)
~(+10)(原码): 1000 1011 结果为:-11
-7(原码): 1000 0111
-7(反码): 1111 1000
-7(补码): 1111 1001
~(-7)(补码): 0000 0110 (符号位为0,正数,采用正数的原反补规则)
~(-7)(反码): 0000 0110
~(-7)(原码): 0000 0110 结果为:+6
注:仅供参考。全为个人理解,如有不足,欢迎指教。