抄的网友的,如下:
(不敢写链接,否则,百度知道会疯的。)
加法器
计算机里面,只有加法器,没有减法器,所有的减法运算,都必须用加法进行。
即:减去某个数字(或者说加上某个负数)的运算,都应该研究如何用加法来完成。
模、补数
在日常生活当中,可以看到很多这样的事情:
把某物体左转 90 度,和右转 270 度,在不考虑圈数的条件下,最终的效果是相同的;
把分针倒拨 20 分钟,和正拨 40 分钟,在不考虑时针的条件下,效果也是相同的;
把数字 87,减去 25,和加上 75,在不考虑百位数的条件下,效果也是相同的;
……。
上述几组数字,有这样的关系:
90 + 270 = 360
20 + 40 = 60
25 + 75 = 100
式中的 360、60 和 100,就是“模”。
式中的 90 和 270、20 和 40,以及 25 和 75,就是一对对“互补”的数字。
知道了“模”,求某个数字的“补数”,就是轻而易举的了:
如果模为 365,数字 120 的补数为:365 - 120 = 245。
用补数代替原数,可把减法转变为加法。出现的进位就是模,此时的进位,就应该忽略不计。
二进制数的模
前面说过的十进制数 25 和 75,它们是 2 位数的运算,模是 100,即 1 的后面加上 2 个 0。
如果有 3 位数参加运算,模就是 1000,即 1 的后面加上 3 个 0。
这里的 1000,是十进制数的一千,可以写成 10^3,即 10 的 3 次方。
推论:有多少位数参加运算,模就是在 1 的后面加上多少个 0。
对于二进制数字,模也是这样推算。
如果是 3 位二进制数参加运算,模就是 1000,即 1 的后面加上 3 个 0;
那么当 8 位二进制数参加运算,模就是 1 0000 0000,即 1 的后面加上 8 个 0。
16 位二进制数参加运算,模可就大了,是 1 的后面加上 16 个 0。
注意:这里提到的 1、0,都是二进制数。
8 位二进制数的模可以按照十进制写成 2^8,即 256。
16 位数二进制数的模,就是 2^16,按照十进制,它就是 65536。
二进制数的补码
求二进制数的补数,目的是往计算机里面存放。
在计算机里面,存放的数字什么的,都称为机器码;那么二进制形式的补数,也就改称为补码了。
一般情况下,都是以 8 位二进制数来讨论补码,少数也有用 16 位数的。
计算时加上正数,是不需要进行求取补数的;只有进行减法(或者加上负数),才需要对减数求补数。
补码就是按照这个要求来定义的:正数不变,负数即用模减去绝对值。
已知一个数 X,其 8 位字长的补码定义为:
/ X 0 <= X <= +127 ;正数和0的补码,就是该数字本身
[X]补 = |
\ 2^8 -|X| -128 <= X < 0 ;负数的补码,就是用 1 0000 0000,减去该数字的绝对值
例如 X = -126,其补码为 1000 0010,计算方法如下:
1 0000 0000
- 0111 1110
-----------
1000 0010
可以看出,按照补码的定义来求补码,概念十分清晰,方法、步骤也是十分简单的。
本回答被网友采纳在计算机系统中,数值,一律用补码来表示和存储。
原码和反码,都是没有任何用处的。
【补码】,其实,就是一个【代替负数进行运算的正数】。
而正数,直接就可以运算,不需要由谁来代替。所以,正数,它就没有补码!
那么,关于正数补码的讨论,都是无稽之谈。说正数的补码与原码反码相等,更是无聊至极!
利用补码,可以把负数,用正数代替,也就把减法,转换成加法来运算。
这样就统一了加减法运算,因此,就可以简化计算机的硬件。
而原码反码并不具备这种功能。所以,计算机只是使用补码,并不用原码和反码。
-----------------
补码,怎么就能【代替负数】呢?
这种现象,源于数字的周期性。
先用十进制来说明:
24 - 1 = 23
24 + 99 = (1) 23
舍弃进位,-1 就可以用 +99 来代替。
-1 就和 +99 是等效的。
这里用的是 2 位 10 进制数,计数周期就是 10^2 = 100。
计算时忽略这个周期,负数就可以用正数代替。
+99 就是-1 的补数。
计算公式:补数=负数+周期。
-----------------
上过中学的同学,都知道,三角函数的周期是 2π。
任何角度 X,加上 2nπ,都和原来的 X 相等效。
一个周期,你可以选用 (-π ~+π ) 或 ( 0 ~ 2π ),都是可以的。
如果,你不喜欢负的角度(如-π/2),想把它换算到正的角度,该怎么办?
很简单,你只要:-π/2 + 周期(2π)= +3π/2,这就变换成正的了。
上过中学就知道,+3π/2 与负角度-π/2,完全是等效的。
-----------------
计算机用二进制,补数,则称为补码。
8 位 2 进制的计数范围是:0000 0000~1111 1111(十进制255)。
8 位 2 进制的计数周期是:2^8 = 256。
-1 的补码,就是:-1 + 256 = 255 = 1111 1111。
-2 的补码,就是:-2 + 256 = 254 = 1111 1110。
。。。
-128 的补码,是:128 = 1000 0000。
以上,就是 128 个负数的补码。
而 0000 0000~0111 1111,则不需转换,直接代表零和正数。
--------
计算示例: 7-3 = 4。
用八位补码的计算过程如下:
7 =0000 0111
-3 的补码=1111 1101 = 253
--相加-------------
得 (1) 0000 0100 = 4
舍弃进位,只保留八位作为结果,就求出了 7-3。