补码

来源:互联网 发布:端口波特率修改工具 编辑:程序博客网 时间:2024/06/03 12:36

编码方法

X≥0时,[X]补码=X;X≤0,[X]补码=2^n-|X|。n是表示x的位数,如果用一个字节来表示x,n就是8。
0按两种方式计算的补码都是一样的,不过后者需要忽略溢出。
X<0时,补码计算也可以这样描述:其绝对值的最高位填1,其余位按位取反,然后再加1。

x 补码 127 0111 1111 … … 2 0000 0010 1 0000 0001 0 0000 0000 -1 1111 1111 -2 1111 1110 -3 1111 1101 … … -128 1000 0000

扩展

补码数要扩展时,正数是在符号的前面补0,负数是在符号的前面补1。也就是说,补码数扩展实际上是符号位的扩展。

范围

对n位整数来说:
无符号数,0≤N≤2^n-1
有符号数,-2^(n-1)≤N≤2^(n-1)-1

运算

法则1:两个数的补码之和等于该两数和的补码。即 [ X ]补码 + [ Y ]补码 = [ X + Y ]补码
X= 00000101
Y= 00000011
[X]补码= 00000101
[Y]补码= 00000011
[X]补码+ [Y]补码= 00001000
X+Y = 00000101 +00000011 = 00001000
[X+Y] 补码= [00001000]补码 = 00001000

法则2:一个数的相反数的补码等于该数补码各位按位取反(包括符号位),末位加1。即 [-X] 补码 = [X]补码按位取反后加1
X= 0000101(十进制 +5)
[ X] 补码= 00000101(根据补码定义)
[-X] 补码= 11111011(根据补码定义)
[-X] 补码= 11111010+1= 11111011

法则3:补码运算的结果也是补码。

结论

减法可用加法来实现。因为乘法是加法的简便运算,除法是减法的简便运算,因此,乘、除法也可以用加法实现。从而,计算机只要有了做加法的能力,就可以完成四则算术运算了。