‘壹’ 原码,补码,反码的应用
计算机中,只有补码,并没有原码和反码。
借助于补码,负数和减法,都可以转化成加法来进行运算。
那么,计算机的硬件,就可以简化了。
因此,在计算机中,只有加法器,并没有减法器。
原码和反码,都没有什么用,也可以说,根本就没有用!
------------------------
补码是怎么回事?这得从“补数”谈起。
计算机所能计算的位数,是固定的,如八位机、16 位。。。
位数限定之后,就可以用“补数”代替负数,用加法实现减法运算。
如限定两位十进制,-1,就可以用 +99 代替。
例如:
25 - 1 = 24
25 + 99 = (一百) 24
舍弃进位,只取两位,这两种算法,功能就完全相同。
99,就是-1 的补数。计算公式:补数 = 一百+负数。
一百,是用两位十进制数,循环计数的周期,10^2。
这个周期,在计算机专业,又称为“模”。
-------------------------
计算机用二进制,补数,就改称为:补码。
八位二进制:0000 0000 ~ 1111 1111 (十进制 255)。
循环计数的周期,是:2^8 = 256。
求负数补码的计算公式,也是: 周期 + 负数。
-1 补码就是:256 + (-1) = 255 = 1111 1111(二进制)。
用不存在的“原码反码取反加一”来求,也是这个结果。
正数,不用转换,直接参加运算。
也可以说:正数自身就是补码。
-------------------------
举例说明,如: 5 - 7 = -2。
用补码计算的过程如下:
5 的补码=0000 0101
-7的补码=1111 1001
--相加-------------
得(1) 1111 1110 = -2 的补码
舍弃进位,只保留八位,这就用加法,实现了 5-7。
‘贰’ 原码,反码,补码怎么解释
正负数,在计算机中,只是用【补码】来存储。
而原码和反码,在计算机中,并不存在。
下面按照八位二进制来说明补码的意义。
十进制数 0,存放形式,就是二进制 0000 0000。
十进制数 +1,就加上 1,二进制是 0000 0001。
十进制数 +2,就再加 1,二进制是 0000 0010。
。。。
十进制数 +127,加 1加 1...,就加到了 0111 1111。
+127,这就是最大数值。
----------
负数怎么办?你就从 0,依次递减吧。
十进制数 0,以二进制 0000 0000 存放。
十进制数 -1,就减去 1,得 1111 1111 = 255(十进制)。
十进制数 -2,就再减 1,得 1111 1110 = 254。
十进制数 -3,就再减 1,得 1111 1101 = 253。
。。。
十进制数 -128,减 1减 1...,得 1000 0000 = 128。
不要再减了,这就是最小值了。
(你再继续减,就是 0111 1111,这就是+127 了。)
因此,最小数值就是-128。
----------
总结:
零和正数:直接用二进制存放。
负数:存放形式是【256+这个负数】。
这套存放格式,就是所谓的【补码】。
求【补码】,就是这么简单。
完全不用绕到“原码反码符号位”那么远。
可以用十进制来计算。如果需要二进制,你就再转换一下。
用这个方法,不涉及原码反码符号位,就少了不少麻烦事。
----------
为什么负数用补码存储?
利用补码,可以把减法运算,转换成加法。
(所以,在计算机中,有一个加法器,就够用了。)
例如,6-2 = 4,在计算机中,用补码代替数字,运算如下:
6 的补码是0000 0110
-2 的补码是1111 1110
--相加-------------
得:(1)0000 0100 (= 4 的补码)
(括号中的 1,是进位,舍弃不要了。)
注意:
如果运算结果超出了-128~+127 的范围,结果将是错的。
这种现象称为“溢出”。
再注意一下:进位,并不等于溢出。
---------
因为补码的这个特性,所以,在计算机中,只是使用补码存放数据。
而原码反码,在计算机中,都是不存在的。
所以,大家,完全不必在原码反码上浪费时间精力。
‘叁’ 一个数的原码,反码,补码
在计算机中,并不存在原码和反码。
在计算机中,只用补码表示正负数。
使用补码的意义:可用加法,代替减法运算,从而简化计算机硬件。
------
理解补码,要先从补数开始。
时针转一圈,周期是 12 小时。
倒拨 3 小时,就可以用正拨 9 小时代替。
9 就是-3 的补数。9 = 12-3。
同理,分针倒拨 X 分,也可以用正拨“60-X”代替。
60 是分针的周期。
三角函数的周期是 2π。
那么,-π/2 和 +3π/2 处的函数值,必定是相同的。
所以,这正负两个角度,也是可以互相替换的。
------
对于两位十进制 0~99,周期就是一百。
这时,减一,你就可以用 +99 代替。
25 - 1 = 24
25 + 99 = (1) 24
结果取两位,舍弃进位。这两种算法,功能就是相同的。
99,就称为-1 的补数。
98,就是-2 的补数。
。。。
其它补数,你自己都会求的。
利用补数,就可以用加法,代替减法运算。
补数怎么求?
负数的补数 = 周期 + 该负数。
正数,不需要求补数。也可以说,本身就是补数。
------
计算机使用二进制,补数,就改称:补码。
八位二进制,共有 256 个数字。周期就是 256。
负数的补码 = 256+该负数。
16位二进制,共有 2^16 个数字。周期就是 65536。
负数的补码 = 65536+ 该负数。
正数,不需要做变换。或者说,正数本身就是补码。
那么,在八位二进制时:
-1 的补码是:256-1 = 255 = 1111 1111(二进制)。
-2 的补码是:254 = 1111 1110。
-3 的补码是:253 = 1111 1101。
。。。
-128 补码:128 = 1000 0000。
------
补码的应用如: 7-3 = 4。
用补码的计算过程如下:
7 的补码=0000 0111
-3的补码=1111 1101
--相加-------------
得:(1)0000 0100= 4 的补码
舍弃进位,只保留八位,结果肯定正确。
------
有了补码,计算机,仅需配置一个加法器即可。
而原码和反码,并没有这种能力。
所以,在计算机中,并没有原码和反码。
原码和反码,根本不存在。
它们都是多少呢?就不必关心了吧。
‘肆’ 计算机原码反码补码怎么算
计算机原码反码补码计算方法:
1、原码
原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值。比如如果是8位二进制:
[+1]原 = 0000 0001
[-1]原 = 1000 0001
第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是:[1111 1111 , 0111 1111]
即[-127 , 127]
原码是人脑最容易理解和计算的表示方式。
2、反码
反码的表示方法是:正数的反码是其本身。负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
可见如果一个反码表示的是负数,人脑无法直观地看出来它的数值。通常要将其转换成原码再计算。
3、补码
补码的表示方法是:正数的补码就是其本身。负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+1。(即在反码的基础上+1)。
[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补
对于负数,补码表示方式也是人脑无法直观看出其数值的。通常也需要转换成原码在计算其数值。
(4)利用加法器实现源码转化补码扩展阅读:
原码,反码和补码是完全不同的。既然原码才是被人脑直接识别并用于计算表示方式,为何还会有反码和补码呢?
首先,因为人脑可以知道第一位是符号位,在计算的时候我们会根据符号位,选择对真值区域的加减。但是对于计算机,加减乘数已经是最基础的运算,要设计的尽量简单。计算机辨别"符号位"显然会让计算机的基础电路设计变得十分复杂。于是人们想出了将符号位也参与运算的方法。我们知道,根据运算法则减去一个正数等于加上一个负数,即: 1-1 = 1 + (-1) = 0 , 所以机器可以只有加法而没有减法,这样计算机运算的设计就更简单了。
于是人们开始探索将符号位参与运算,并且只保留加法的方法。
‘伍’ 原码,反码,补码的编码规则
计算机中,并没有原码和反码。
正负数据,在计算机中,只是以补码存放的。
==============
下面以八位二进制来说明补码的编码规则。
八位二进制,共有 256 个补码。
数字 0,就是以 0000 0000 存放。
数字 1,就是加上 1,得 0000 0001。
其它,继续加,就行了。
数字 127,就是 0111 1111。
以上就是 0~127 的补码。
==============
负数,递减就行了。
数字-1,就从 0,减去一,即:
0000 0000-1 = (借位 1) 1111 1111。
只保留八位,就是 1111 1111(十进制 255)。
数字-2,就再减一,得:1111 1110(= 254)。
数字-3,就再减一,得:1111 1101(= 253)。
其它,继续减,即可... ...
数字-128,最后就得到:1000 0000(= 128)。
以上这些,就是-1~-128 的补码。
==============
计算公式:
负数的补码=【256+该负数】
正数的补码,就是正数本身
(如果需要二进制,你自己再变换。)
八位补码可以表示:-128~+127。
==============
用补码代替负数,就可以把减法,转换为加法运算。
因此,计算机只要有一个加法器,就够用了。
例如: 7-3 = 4。
用补码的计算过程如下:
7 的补码=0000 0111
-3的补码=1111 1101
--相加-------------
得:(1)0000 0100= 4 的补码
舍弃进位,只保留八位作为结果,就是 4。
这就用加法,解决了负数以及减法的问题。
------
原码和反码,并没有这些功能。
所以,在计算机中,根本就没有原码和反码。
所谓的“取反加一”,由谁算呢?
计算机,可不做这些事。
‘陆’ 原码为何要转换为补码呢
因为加法器。
CPU的加减法是加法器完成的。
当然我们都知道
加上负数就代表减法,CPU也是这么做的。
但问题在于,机器指令,加法ADD,减法SUB。
加法器是只不过是个机器,他的行为很简单。二进制电路的位逻辑表达很简单,就是数1bit位,数2bit位,进行异或,然后再和进位标志异或,结果为当前位的值。
如果三个数有2个是1,就会进位。
逻辑很简单。
拿char来说,
16+16=32,
16+(-16)=0。
二进制
ADD
0001
0000+00010000,答案是0010
0000
就是32。没问题。
假设仅仅用第一位为符号位,其他位是数字
16+(-16)=
0001
0000
+
1001
0000=
1010
0000
,很可惜这个数是
-32
16+(-16)=-32,悲剧发生。如果用补码,你就发现奇迹了。。。
‘柒’ 利用加法器设计一个代码转换电路,将bcd代码的8421码转换成余3码
根据余3码的定义可知,余3码是由8421码加3后形成的代码。所以,用4位二进制并行加法器实现8421码到余3码的转换,只需从4位二进制并行加法器的输入端A4、A3、A2和A1输入8421码,而从输入端B4、B3、B2和B1输入二进制数0011,进位输入端C0接上“0”,便可从输出端F4、F3、F2和F1得到与输入8421码对应的余3码。
‘捌’ 原码的减法为什么可以转换成补码的加法意义又是什么呢
时钟,倒拨3小时,可以用正拨9小时来代替。
限定两位数时,减一,就可用+99代替。
如:24-1=23
24+99=(1)23
只取两位数,两个结果,就是相同的。
99,就是-1 的补数。
(在二进制时,就称为“补码”。)
就是说:当限定计算的位数后,使用补码,就可用加法代替减法运算。
意义:仅用一个加法器,就可做加减两种运算。减少硬件,厂家省钱。
‘玖’ 试用全加器74LS283及相应门电路设计电路,得到二进制数ABCD(原码)的补码A'B'C'D'()
有什么问题可以继续问 记得给分
‘拾’ 正数的补码等于原码是如何算出来的
这是规定。
补码是为负数想出来的办法,目的是减法可以用加补码的方法实现,补码可用反码加1得来,于是又有了负数的反码。
计算机里有硬件“加法器”,有了补码,减法也可以用加法器做了,计算机里运算速度硬件远快于软件,这就是反码,补码和原码多样化的原因。
(10)利用加法器实现源码转化补码扩展阅读:
原码求补码
正数
正整数的补码是其二进制表示,与原码相同 。
例:+9的补码是00001001。(备注:这个+9的补码是用8位2进制来表示的,补码表示方式很多,还有16位二进制补码表示形式,以及32位二进制补码表示形式,64位进制补码表示形式等。)
负数
求负整数的补码,将其原码除符号位外的所有位取反(0变1,1变0,符号位为1不变)后加1。