补码
2017-06-10 本文已影响0人
laxe
编码方法
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:补码运算的结果也是补码。
结论
减法可用加法来实现。因为乘法是加法的简便运算,除法是减法的简便运算,因此,乘、除法也可以用加法实现。从而,计算机只要有了做加法的能力,就可以完成四则算术运算了。