整数的二进制表示
原码
正数直接用其 2 进制串表示,如 8 位原码表示 4:0000|0100
对于负数,需要用符号位标记,一般最高位用作符号位,如 8 位原码表示 -4:1000|0100
对于原码,正数相加没什么问题,如 4 + 3:
0000|0100 +4
0000|0011 +3
--------- +
0000|0111 +7
但对于包含负数的加法就会导致运算不准确
-
如 -4 + (-3):
1000|0100 -4 1000|0011 -3 --------- + 0000|0111 +7
-
如 4 + (-3):
0000|0100 +4 1000|0011 -3 --------- + 1000|0111 -7
因此原码表示不便于加法运算
补码
为了使负数的加法运算准确,需要在原码的基础上对负数的表示做修改,该表示称为补码
要使 -4 的二进制表示满足加法运算,需满足与 +4 相加为 0
0000|0100 +4
????|???? -4
--------- +
0000|0000 0
很明显 -4 的表示应为:1111|1100
负数的补码表示可以总结为以下两条规律(为或的关系):
-
负数的补码表示为其绝对值的原码按位取反加 1,如 -4 的补码:
0000|0100 绝对值原码表示 1111|1011 按位取反 1111|1100 加 1
已知补码求数值则反过来,如求
1111|1100
的数值:1111|1100 补码 1111|1011 减 1 0000|0100 按位取反得其绝对值的原码
-
负数的补码表示为其绝对值的原码从右往左第一个 1 开始和之后的位按位取反,如 -4 的补码:
0000|0100 绝对值原码表示 1111|1100 从右往左第一个 1 之后按位取反 ^
已知补码求数值则反过来,如求
1111|1100
的数值:1111|1100 补码 ^ 从右往左第一个 1 0000|0100 该位置之后按位取得其绝对值的原码