1. 原码:是以符号位为0的称正数,符号位为1 的称负数的一种数码。
1.1 正数+正数 = 正数(✓)
1000 0000【128】 +
0000 1000【8】 =
1000 1000【136】
根据栗子所示,这种运算情况结果正确。
1.2 正数+负数 = 正数(×)
0 0010【2】 +
1 0100【-4】=
1 0110【-6】
根据栗子所示,这种运算情况结果错误,正确结果应为【-2】。
1.3 负数+负数 = 负数(×)
1000 1000【-8】+
1000 1000【-8】=
0001 0000【16】
根据栗子所示,这种运算情况结果错误,正确结果应为【-16】。
总结:原码只能进行正数运算。
2. 反码:正数的反码是其本身(等于原码),负数的反码是符号位保持1不变,其余按位取反。
为了补充原码的运算能力不足的情况,衍生出一种新的数码——反码
2.1 正数+正数 = 正数(✓)
原码下 || 反码下 :
1000 0000【128】 +
0000 1000【8】 =
1000 1000【136】
2.2 正数+负数 = 正数(✓)
原码下
0 0010 【2】 +
1 0100 【-4】=
1 0110 【-6】
反码下:
0 0010 【2】 +
1 1011 【-11】=
1 1101 【-13】
根据栗子所示,将结果反码转为原码,为1 0010【-13】,这种运算情况结果正确。
2.3 负数+负数 = 负数(×)
原码下
1000 1000 【-8】+
1000 1000 【-8】=
0001 0000【16】
反码下
1111 0111 +
1111 0111 =
1110 1110
根据栗子所示,将结果反码转为原码,为1001 0001【-17】,这种运算情况结果错误。
3. 补码:正数的补码是其本身,负数的补码等于其反码 +1。
在补码例子基础上验证
3.1 正数+正数 = 正数(✓)
原码下 || 反码下 ||补码下:
1000 0000【128】 +
0000 1000【8】 =
1000 1000【136】
3.2 正数+负数 = 正数(✓)
反码下
0 0010 【2】+
1 0100 【-4】=
1 0110 【-6】
补码下
0 0010 +
1 1100 =
1 1110
根据栗子所示,将结果补码转为原码,为1 1110 -> 1 1101 -> 1 0010【-2】,这种运算情况结果正确。
3.3 负数+负数 = 负数(✓)
反码下
1111 0111 +
1111 0111 =
1110 1110
1001 0001【-17】
补码下
1111 1000 +
1111 1000 =
1 1111 0000
根据栗子所示,将结果补码转为原码,为1 1111 0000 ->1 1110 1111-> 1 0001 0000【-16】,这种运算情况结果正确。