机器数的机器数的原码、反码和补码三种形式
4.1 原码
将数的真值形式中“+”号用“0”表示,“-”号用“1”表示时,叫做数的原码形式,简称原码。若字长为n位,原码一般可表示为:
(1)当X为正数时[X]原和X一样,即[X]原 = X。当X为负数时 。由于X本身为负数,所以,实际上是将∣X∣数值部分绝对值前面的符号位上写成“1”即可。
原码表示法比较直观,它的数值部分就是该数的绝对值,而且与真值、十进制数的转换十分方便。但是它的加减法运算较复杂。当两数相加时,机器要首先判断两数的符号是否相同,如果相同则两数相加,若符号不同,则两数相减。在做减法前,还要判断两数绝对值的大小,然后用大数减去小数,最后再确定差的符号,换言之,用这样一种直接的形式进行加运算时,负数的符号位不能与其数值部分一道参加运算,而必须利用单独的线路确定和的符号位。要实现这些操作,电路就很复杂,这显然是不经济实用的。为了减少设备,解决机器内负数的符号位参加运算的问题,总是将减法运算变成加法运算,也就引进了反码和补码这两种机器数。
4.2 反码
如前所述,为了克服原码运算的缺点,采用机器数的反码和补码表示法。若字长为n位,反码可表示为:
(2)即对正数来说,其反码和原码的形式相同;对负数来说,反码为其原码的数值部分各位变反。
4.3 补码
补码是根据同余的概念引入的,我们来看一个减法通过加法来实现的例子。假定当前时间为北京时间6点整,有一只手表却是8点整,比北京时间快了2小时,校准的方法有两种,一种是倒拨2小时,一种是正拨10小时。若规定倒拨是做减法,正拨是做加法,那么对手表来讲减2与加10是等价的,也就是说减2可以用加10来实现。这是因为8加10等于18,然而手表最大只能指示12,当大于12时12自然丢失,18减去12就只剩6了。这说明减法在一定条件下,是可以用加法来代替的。这里“12”称为“模”,10称为“-2”对模12的补数。推广到一般则有:
A – B = A + ( – B + M ) = A + ( – B )补
(3)可见,在模为M的条件下,A减去B,可以用A加上-B的补数来实现。这里模(module)可视为计数器的容量,对上述手表的例子,模为12。在计算机中其部件都有固定的位数,若位数为n,则计数值为 ,亦即计数器容量为 ,因此计算机中的补码是以“ ”为模,其定义如下:
(4)简言之,对正数来说,其补码和原码的形式相同;而从(3)式和(4)式可以看出,对于负数,补码为其反码的末位加1。
总之,正数的原码、反码和补码是完全相同的;负数的原码、反码和补码其形式各不相同。另外,特别要注意的是,对于负数的反码和补码(即符号位为1的数),其符号位后边的几位数表示的并不是此数的数值。如果要想知道此数的大小,一定要求其反码或补码才行。
2024-04-02 广告
【【机器数】的机器数】的原码、反码和补码三种形式
哪有什么:【机器数】的机器数】!
【【机器数】的机器数】的原码!
你还想要无限继续写下去吗!
事实上,你只能求【真值】的原码、反码和补码。
===================
其实,在计算机中,原码和反码,都是不存在的。
在计算机中,只使用补码,代表【正负数】进行运算。
数字 0,在八位机中,其补码就是:0000 0000。
+1,就加上一,即:0000 0001。
其他正数,你就慢慢加吧。。。
对于负数,你就逐次递减:
-1,就是 0000 0000-1,取八位的结果,那么,
-1,就是 1111 1111=255(十进制),这就是补码!
-2 的补码就是:1111 1110=254。
-3 的补码就是:1111 1101=253。
。。。
-128 的补码就是:128=1000 0000。
求负数补码的公式:-X 的补码=256-X。
如果需要二进制,你自己再进行换算。
========
借助于补码,可以用加法,代替减法运算。
这就能够简化计算机的硬件。
原码和反码,都没有这种功能。
它们是多少,无需关心。
在计算机系统中,数值,一律采用补码表示和存储。
原码和反码,在计算机中,都不存在。
补码,其实,就是一个“代替负数进行运算”的正数。
采用了补码,计算机中,就没有负数了。所有的减法运算,也都用加法代替了。
因此,计算机的硬件,就可以简化,只用一个加法器,就能打遍天下。
原码和反码,都没有这种功能,所以,原码和反码,都是不能用的。