在计算机系统中,正负数,都是采用【补码】来表示和存储的。
---------------------
为什么要使用补码呢?
补码,究竟是什么东西呢?
其实,补码,就是一个【代替负数进行运算的正数】。
有了补码,负数,就成了正数,减法运算,也就转成了加法运算。
因此,加、减法,就都可以统一用加法运算。
这么一来,计算机的硬件,就可以得到简化。
-----------------------
正数(补码),怎么就能【代替负数】来做运算呢?
且看 2 位 10 进制数的计算:
24 - 1 = 23
24 + 99 = (一百) 23
如果你舍弃进位、只取 2 位数,+99 就和-1 是等效的。
同样,+98 也可以代替-2 呀!
。。。
在这里,+99 就称为-1 的补数。
补数怎么求?
小学生都会:
补数 = 负数 + 10^n,
n 是位数。
如果是 2 位数,则 10^2 = 100。
这是 2 位 10 进制数的计数周期。
-----------------------
计算机用二进制,补数,就改称为:补码。
8 位 2 进制的范围:0000 0000~1111 1111。
对应的十进制,就是:0 ~ 255。
8 位 2 进制的计数周期:2^8 = 256。
在这种环境下,-1,就要用 255 来代替了。
255 (二进制 1111 1111),就称为-1 的补码。
同理,-2 的补码,就是 254 (1111 1110)。
。。。
知道一个负数,怎么求补码呢?
小学生都会这个公式:
补码 = 负数 + 2^n,
n 是位数。
例如,求-5 的八位补码,方法步骤如下:
[-5]补 =-5 + 2^8 =-5 + 256 = 251 = 1111 1011(二进制)
补码,在计算机里面,是二进制,通常也写成 16 进制。
在计算的时候、写在纸上,用十进制,就比较方便了。
如果需要二进制,最后,再转换一下就可以了。
-----------------------
8 位 2 进制的代码,共有 256 种组合,可以代表 256 个数字或字符。
如果是代表自然数(计算机专业称之为无符号数),那就是 0 ~ 255。
如果是代表整数(正整数负整数零,计算机称为带符号数),那就是补码了。
256 个补码,要分成相等的两个部分,分别代表:
128 个负数,即:-1 ~ -128。
128 个非负数,即:0 ~ +127。
由此,可给出补码的定义式:
X >= 0, [X]补 = X;
X < 0, [X]补 = X + 2^n,n 是位数。
-----------------------
-128 的补码,是什么呢?
很多教材都讲:原码反码取反加一。
但是,-128 没有八位的原码和反码,怎么求其补码?
无能为力了吧!
只能用本文介绍的公式来求,方法如下:
[-128]补 = -128 + 256 = 128 = 1000 0000B
本文完。