补码的意义,计算机的补码运算在计算机中,补码的作用是什么?
补码的意义,计算机的补码运算在计算机中,补码的作用是什么?详细介绍
本文目录一览: 补码存在的意义
数值在计算机中表示形式为机器数,计算机只能识别0和1,使用的是二进制,而在日常生活中人们使用的是十进制,"正如亚里士多德早就指出的那样,今天十进制的广泛采用,只不过我们绝大多数人生来具有10个手指头这个解剖学事实的结果.尽管在历史上手指计数(5,10进制)的实践要比二或三进制计数出现的晚."(摘自<
>有空大家可以看看哦~,很有意思的).为了能方便的与二进制转换,就使用了十六进制(2 4)和八进制(23).下面进入正题.
数值有正负之分,计算机就用一个数的最高位存放符号(0为正,1为负).这就是机器数的原码了.假设机器能处理的位数为8.即字长为1byte,原码能表示数值的范围为
(-127~-0 +0~127)共256个.
有了数值的表示方法就可以对数进行算术运算.但是很快就发现用带符号位的原码进行乘除运算时结果正确,而在加减运算的时候就出现了问题,如下: 假设字长为8bits
( 1 ) 10- ( 1 )10 = ( 1 )10 + ( -1 )10 = ( 0 )10
(00000001)原 + (10000001)原 = (10000010)原 = ( -2 ) 显然不正确.
因为在两个整数的加法运算中是没有问题的,于是就发现问题出现在带符号位的负数身上,对除符号位外的其余各位逐位取反就产生了反码.反码的取值空间和原码相同且一一对应. 下面是反码的减法运算:
( 1 )10 - ( 1 ) 10= ( 1 ) 10+ ( -1 ) 10= ( 0 )10
(00000001) 反+ (11111110)反 = (11111111)反 = ( -0 ) 有问题.
( 1 )10 - ( 2)10 = ( 1 )10 + ( -2 )10 = ( -1 )10
(00000001) 反+ (11111101)反 = (11111110)反 = ( -1 ) 正确
问题出现在(+0)和(-0)上,在人们的计算概念中零是没有正负之分的.(印度人首先将零作为标记并放入运算之中,包含有零号的印度数学和十进制计数对人类文明的贡献极大).
于是就引入了补码概念. 负数的补码就是对反码加一,而正数不变,正数的原码反码补码是一样的.在补码中用(-128)代替了(-0),所以补码的表示范围为:
(-128~0~127)共256个.
注意:(-128)没有相对应的原码和反码, (-128) = (10000000) 补码的加减运算如下:
( 1 ) 10- ( 1 ) 10= ( 1 )10 + ( -1 )10 = ( 0 )10
(00000001)补 + (11111111)补 = (00000000)补 = ( 0 ) 正确
( 1 ) 10- ( 2) 10= ( 1 )10 + ( -2 )10 = ( -1 )10
(00000001) 补+ (11111110) 补= (11111111)补 = ( -1 ) 正确
所以补码的设计目的是:
⑴使符号位能与有效值部分一起参加运算,从而简化运算规则.
⑵使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计
所有这些转换都是在计算机的最底层进行的,而在我们使用的汇编、C等其他高级语言中使用的都是原码。
这个问题,不用讨论计算机怎样怎样...。
人,就是这样算的。
一个小孩,很小的,只会数 100 个数。
能做加法,还不会做减法。
那么,减一,你就可以教他:加 99。
比如:
26 - 1 = 25
26 + 99 = (1) 25
对这个小孩来说,结果,不是一样吗?
99,就是-1 的补数。
由此,就能推出,计算机的补码:
255,就是-1 的补码;
254,就是-2 的补码;
... ... 。
存在意义,就是:简化硬件,省钱。
因为,负数,是可以用一个正数(补码)代替的。
如: 24 - 1 = 23
24 + 99 = (一百) 23
忽略进位,用 +99 就可以代替-1。
+99,就是-1 的补数。 计算机用二进制,就称为:补码。
用补码(正数)代替负数,那么,计算机中,就没有负数了。
因此,在计算机中,也就只有加法运算了。
所以,在计算机中,只需设置一个加法器,便可加减通吃了。
补码可以简化计算机的设计。
对于人脑而言,做加减题时,第一反应就是根据符号位,来选择对真值区域的加减。但是计算机而言,像加减乘除这类最最基础也是应用得最频繁的基本运算,在物理逻辑的设计上一定要设计的尽量简单。
如果让计算机也先判断符号位再分别做加或者减的运算的话,会使得计算机的电路设计变得较为复杂。人类发明了将符号位也参与进运算的方法来。对于计算机而言,不管是加法还是减法,都统一用加法来做运算,可以使得计算机的设计变得更加的简单。
扩展资料:
补码是另一种编码方式。与反码类似,正数的补码是它本身,而负数的补码则是它的反码再+1。同样,对于负数而言,补码也是无法直观地看出数值的,需要转成原码。
CPU 的基本单元 ALU 模块。在ALU里,加法是最基本的运算。通过程序,乘法可以转换为加分,除法可以转换为减法。补码表示,则可以让减法直接转换为加法。这样,ALU 核心只需要加法器即可满足功能,加法器可以通过集成电路中的晶体管来实现。
参考资料来源:百度百科-补码
数学发展史>
补码与反码有什么用处?
用补码表示“有符号数”,就是“用正数代替负数”。
比如,可以用 255 (二进制 1111 1111),代替-1 进行运算。
这样,就把加、减法,统一用加法来进行计算,硬件就得以简化。
因此,在计算机里面,通用的是补码。
原码和反码,都不具备这种特点,所以,计算机中,并不使用它们。
-----------------
负数与补码的关系,是很简单的。
只要对其正数做“减一、取反”就行了。
如,-1 的补码,可如下求出:
先对 +1 减一,得:0000 0000;
再将其取反,就是:1111 1111 (十进制 255)。
如果是 16 位数,那就是 16 个 1,即 65535。
-----------------
下面求-13 的补码:
减一,得:12 = 0000 1100 (二进制)。
取反,得:1111 0011。
即 [-13]补 = 1111 0011。
-----------------
记住:减一、取反,就足够了。
原码反码符号位,都是无用的。
补码的作用,主要,是代表负数的。
数字 0,其八位补码就是:0000 0000。
那么,数字 -1,就是 0000 0000 - 1 = 1111 1111。
所以,数字 -1,其补码就是:1111 1111 = 255(十进制)。
同理,数字 -2,其补码就是:1111 1110 = 254(十进制)。
。。。
最终,数字 -128,其补码就是:1000 0000 = 128(十进制)。
--------
如果是 16 位的补码:
数字 -1,其补码就是"16 个 1",等于 65535。
--------
求补码,并不需要原码反码。
计算机中,根本也没有原码反码。
原码反码,是毫无用处的东西。
首先你要知道,原码和反码是为了说明补码的原理而设定的两个概念,实际在计算机中只有补码。
这所以要用补码,原因你可以百度一样,百度百科里就有,我这里直接摘录如下:
补码(two's complement) 1、在计算机系统中,数值一律用补码来表示(存储)。 主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补 码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃
补码来表示和存储。反码多应用于系统环境设置。
1、补码:在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。
2、反码:反码是数值存储的一种,但是由于补码更能有效表现数字在计算机中的形式,所以多数计算机一般都不采用反码表示数。
扩展资料:
已知一个数的补码,求原码的操作其实就是对该补码再求补码 :
1、如果补码的符号位为“0”,表示是一个正数,其原码就是补码。
2、如果补码的符号位为“1”,表示是一个负数,那么求给定的这个补码的补码就是要求的原码。
例:已知一个补码为11111001,则原码是10000111(-7)。因为符号位为“1”,表示是一个负数,所以该位不变,仍为“1”。其余七位1111001取反后为0000110;再加1,所以是10000111。
参考资料来源:百度百科-反码
参考资料来源:百度百科-补码
补码的意义
在计算机系统中,数值,一律采用补码表示和存储。
原码和反码,在计算机中,都是没用的,也都是不存在的。
补码的意义,得从“补数”谈起。
你看 2 位 10 进制的计算:
25 - 1 = 24
25 + 99 = (一百) 24
只要你舍弃超出 2 位数的进位,+99 就和-1 是等效的。
加法,也就代替了减法。
同样,+98,也可以代替-2。
。。。
这些正数,就是“负数的补数”。
利用补数,在计算过程中,就没有负数了。
同时,也就没有了减法运算。
求补数的公式,小学生都能写出来:
补数=负数+10^n,
n 是补数的位数,
10^n 是 n 位数的计数周期。
----------------------
计算机用二进制,补数,就称为:补码。
补码,就是“代替负数”的正数。
使用了补码,不仅可以简化算法,而且还能简化硬件。
求二进制补码的公式,依然是:
补码=负数+2^n。
在一个字节中,n = 8,计数周期是:2^8 = 256。
-1 的补码,就是:255 = 1111 1111 (二进制),
-2 的补码,就是:254 = 1111 1110,
。。。
-128 的补码,是:128 = 1000 0000。
---------------------
求补码,用“原码反码取反加一符号位不变”就费事了。
那些说法,都没有任何理论依据。
而且,也说不明白“补码是什么意思?”。
老外算术不行,也弄不懂周期的意思,才编造出这些骚操作。
我们的计算机专业老师,跟风讲这些,就是想多赚点课时费而已。
在计算机中,二进制数据有三种形式:原码、反码和补码,要弄清楚补码的意义,首先让我们来了解三种形式的定义。
假设字长为4,其中最高位为符号位:正数为0,负数为1。剩下的3位表示该数的绝对值。 正数的原码反码补码都是一样的。
1.原码
2.反码
反码就是在原码的基础上,符号位不变其他位按位取反(就是0变1,1变0)就可以了。
3.补码
补码也非常的简单,就是在反码的基础上按照正常的加法运算加1。
从前面的三种数字编码类型的定义,我们可以看出数据的原码,使用符号位来区分了正负数,更加符合人脑直观识别并且用于计算的表达方式。但是在计算机中,是通过补码的形式保存数据,下面将解释为什么计算机系统要用补码存放数据。
定义一个字长为4的二进制累加系统,该系统的规则就是从左到右依次累加0001;
如果最高位是符号位时,图表第二行表示原码对应的10进制数,不难发现,如果在确定字长为4时,累加过程是符合周期性变化的,原因就是当1111+1时会出现字节溢出的情况,10000的最高位溢出失效,导致结果变为0000;
在现实生活中,时钟显然是符合周期性的,12点过后是1点,人们早已习惯了这种思维方式,所以会忽略对时钟这种表示时间方式的思考。凌晨12点加1个小时,其实表式的时间是天数加1之后的1点,但是对于时钟系统而言,天数不是自己所能表示的,这就相当于上面图表中1111+1=0000(1|0000 1是溢出位,在字长为4的系统中是不能表示的)。
时钟系统和二进制数原码的累加系统都有周期性,具有周期性的原因是当前层次系统中有其不能表示或未能感知的其他层次系统。
计算机运算系统正是利用了周期性的这一特性。
假设时针向顺时针方向拨动为加,逆时针拨动为减。
所以很容易发现,在时钟中7-1=7+11,这就是周期系统中加减法发的转化方式,其实和简单,也很符合我们的直觉。
所以重新考虑原码的减法问题,n-m = n+(MAX-m),其中MAX就是该周期中所能表示的所有数的数量,放到上面原码的例子中就是16个,而放到时钟系统中就是12个。如:
在说原码累加系统加减法转化例子之前,我们再看下图表
为了方便说明在每一行的开始定义了该行的名称分别为A、A1、A2、B、B1、B2.
累加系统不同于周期系统的一点是会有负数的概念出现,A2行就是最高位表示符号位时原码解码后表示的十进制数。在图表中发现,当有符号位时二进制原码的累加转换为十进制数时,出现了与我们现实生活数学公理相违背的现象,错误发生在最高位为1后,如1001+1=1010(-1+1=-2),原因是在定义这个累加系统在运算时就没有让系统知道高位0与1有不同之处,也就是累加的计算过程中无法感知符号。
解决问题的方式有两种
在计算机系统中,解决这个问题的方式显然是用第二种,cpu是无法感知符号位的,这样做可以减少cpu设计难度,极大地提高运行效率。
所以也就是说cpu运算时还是按照A行进行累加,但在解码运算结果时做一些处理,即将A转变为B,而B1是不考虑溢出和临界值时的十进制正确结果。A解码为B的算法就是当最高位为1时,符号位不变,其他位取反,不难发现这就是反码的定义。
当这样转化后会发现出现了0和-0两个0并且会出现0 - 1 = -0这种情况(将0向左移动)。所以还得做一个简单的处理,就是去加一个1,也就是B1转化为B2,而B2就是最终的正确十进制值。
其实按照直觉可以发现,当符号位转化时,其他位应该取反才能得到正确结果,正数越加越大,负数越加越小。
根据我们的努力将A通过反码的解码方式转变为B,而让B的解码结果加1(补码),得到了B2,从而使累加系统当出现负数时变得合理起来。在转变为B2之后,我们需要解决的是如何用累加系统去表示减法。本质上和前面的时钟系统转化是一样的。可以借助上面的时钟系统以及下面的例子去理解累加系统的减法运算。
在看例子之前,稍微介绍一下“模” 的概念: 模是指一个计量系统的计数范围,取模运算实质上是计量器产生“溢出”的量,前面的周期系统中n-m = n+(MAX-m)得出的加减转化其实就是用到了模的概念,MAX就是模。
在计算机系统中,计算整数加减法时,需要经过以下步骤:
计算机的补码运算在计算机中,补码的作用是什么?
补码,实际上,就是一个“代替负数”的正数。
使用了补码之后,计算机中,就没有负数了。
同时,也就没有减法运算了。
计算机,只要配置一个加法器,就能横行天下了。
这就是补码的作用。
---------------------
补码(一个正数),怎么就能代替负数呢?
想一想周期性的规律吧。
比如, 2 位 10 进制数(0~99),计数周期就是 10^2=100。
可有: 25 - 1 = 24
25 + 99 = (一百) 24
你舍弃进位的 1 百,只保留 2 位数,+99 就能代替-1!
而且,加法,也能代替减法运算!
同样,+98 也可以代替-2。
。。。
这些正数,就称为“负数的补数”。
求补数的公式,显然就是:
补数=负数+10^n
式中:n 是补数的位数。
10^n,是 n 位 10 进制数的周期。
这公式,在三角函数中,也有雷同的表现。
三角函数,是以 2π 为周期的。
任何负角度,加上周期,就可以转换为正角度。
如:x =-π/2,与其等效的正角度,即为:
x =-π/2 + 2π = +3π/2
-------------------
计算机用二进制,补数,就称为:补码。
求负数的补码,公式是:
补码 = 负数 + 2^n
2^n,就是 n 位二进制数的计数周期。
对于 8 位 2 进制数,周期就是 2^8 = 256。
那么,
-1 的补码就是 255 = 1111 1111 (二进制)。
-2 的补码就是 254 = 1111 1110 (二进制)。
。。。
-128 的补码就是 128 = 1000 0000 (二进制)。
正数,不用转换,也不许做任何转换,必须直接去参加算。
所以,正数,并没有补码。
-------------------
求补码,不需要“符号位原码反码取反加一符号位不变”。
那些个步骤,都没有什么数学理论依据。
数学不好的老外,没有正确的思路,才用那些骚操作。
可以通过补码运算,通过最高位和次高位的进位相异或可以判断计算结果是否溢出。
计算机中的有符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同。
在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。
正整数的补码是其二进制表示,与原码相同。
例:+9的补码是00001001。(备注:这个+9的补码是用8位2进制来表示的,补码表示方式很多,还有16位二进制补码表示形式,以及32位二进制补码表示形式,64位进制补码表示形式等。每一种补码表示形式都只能表示有限的数字。)
负数解释:
求负整数的补码,将其原码除符号位外的所有位取反(0变1,1变0,符号位为1不变)后加1。
同一个数字在不同的补码表示形式中是不同的。比如-15的补码,在8位二进制中是11110001,然而在16位二进制补码表示中,就是1111111111110001。以下都使用8位2进制来表示。
原码,反码,补码,是什么?
所谓原码就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
原码10010= 反码11101 (10010,1为符号码,故为负)
(11101) 二进制= -13 十进制
补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。
以上答案来自百科
这种计算机方面的概念听起来可能稍微难以理解
你可以只去记住原码,补码和反码的转换方法~
带符号数,有三种表示方法,即:原码、反码和补码。
但是,在计算机系统中,数值一律用【补码】来表示和存储。
所以,在计算机系统中,原码和反码,都是不存在的。
使用补码的意义:可以把减法或负数,转换为加法运算。
因此,就能简化计算机的硬件。
=====================
补码的概念,来自于:补数。
比如钟表,时针转一圈,周期是 12 小时。
那么,倒拨 3 小时,可以用正拨 9 小时代替。
9,就是-3 的补数。 计算方法: 9 = 12-3。
同理,分针倒拨 X 分,可以用正拨(60-X) 代替。
60,是分针的周期。
同理,三角函数的周期是 2π。 那么,
在-π/2 处 的函数值,就与 2π-π/2 = +3π/2 处 相同。
------------
当你使用两位十进制数:0~99,周期就是 一百。
那么,减一,就可以用 +99 代替。
24-1 = 23
24 + 99 = (1) 23
舍弃进位,这两种算法,功能就是相同的。
于是,99 就是 -1 的补数。
其它负数的补数,可以按照下式来求:
补数 = 周期 + 负数
------------
计算机中使用二进制,补数,就改称为【补码】。
八位二进制是:0000 0000~1111 1111。
相当于十进制:0~255, 周期就是 256。
那么,-1,就可以用 255 = 1111 1111 代替。
所以:-1 的补码,就是 1111 1111 = 255。
同理:-2 的补码,就是 1111 1110 = 254。
继续:-3 的补码,就是 1111 1101 = 253。
。。。
最后:-128 的补码,就是 1000 0000 = 128。
负数补码的计算公式:【 256 + 这个负数 】。
(式中的 256 = 2^8,是八位二进制的周期。)
正数,直接运算就可以,并不存在补码的问题。
所以,正数,并不用求补码。
(也有人乱说:正数本身就是补码。)
------------
求解算式: 7-3 = 4。
计算机中,并没有减法器,必须改用补码相加。
列竖式如下:
7 的补码=0000 0111
-3的补码=1111 1101
--相加-------------
得: (1) 0000 0100 = 4 的补码
舍弃进位,只保留八位,结果完全正确。
------------
借助于补码,可以简化计算机的硬件。
原码和反码,并没有这种功能。
所以,在计算机中,根本就没有它们。
它们都是什么? 就不用关心了。
补码有什么用?
在计算机系统中,负数,一律采用补码表示和存储。
什么是补码?
补码,就是“代替负数”的正数。
你看时钟,时针转一圈,周期是 12。
倒拨 3 小时,可以用正拨 9 小时代替。
你看 2 位 10 进制数,计数周期是 10^2 = 100。
那么有: 24 - 1 = 23
24 + 99 = (一百) 23
只要你忽略进位,+99 就可以代替-1。
而且,加法,也就代替了减法运算。
这些代替负数的正数,就称为:负数的补数。
计算公式:补数=负数+周期。
---------------------
计算机用二进制,补数,就称为:补码。
8 位 2 进制数,计数周期就是 2^8 = 256。
此时,-1 就可以用 255 = 1111 1111 代替。
同理,-2 的补码就是 254 = 1111 1110。
。。。
什么是补码?
补码的定义式,如下:
负数的补码 = 负数 + 周期 = 周期-| 负数 |。
零和正数,不存在补码。也不许变换。
---------------------
补码有什么用?
使用了补码之后,在计算机中,就没有负数了。
同时,也就消除了减法运算。
因此,计算机的硬件,也就可以简化了。
这就是使用补码的意义。
---------------------
补码的特点,来自于“计数系统的周期性”。
补码的特点,与原码反码毫无关系。
从“符号位原码反码取反加一”来学习补码,是不能理解“补码的意义”的。
“取反加一符号位不变”这些,并没有理论依据。
这都是某些老外随口瞎编的,就不要当真了。
问题一:补码有什么用? 你应该知道原码、反码、补码吧?正数的补码,就是基本身
负数的补码,就是原码按位取反加1
符号位,就是最高位,最左面的第一位;其它位,就是剩下的7位
由于运算器进行加法是最快的,因此,使用补码是为了加快计算
问题二:补码与反码有什么用处? 在现在的计算机中,用补码表示有符号数,其计算方法,和无符号数的计算方法相同,所以可以共用一个运算器。
因此,在计算机里弧,通用的是补码。
原码和反码,都是用于求补码的中间过程,一般都是写在纸面上,并不存入计算机。
问题三:C语言补码有什么用? 那补码出现了,0就只有一种表示方法?怎么表示?还有,-1用补码可以表示成11111111。那么补码11111111不是也可以看成原码的11111111(十进制为255)? 在补码中有+0即:0000 0000 表示十进制是0;也有-0即:1000 0000 表示十进制是-127(???请看下面);先看例子:原码1表示为:0000 0001 最高位为1为负,补码则 取反+1则是-1;即1111 1111即么-1(注是补码) +1 等于0么?错,在平常人想是-1+1=0 。但是并不是1111 1111 + 0000 00001 (一个数(原码)减一个数(减原码)则是加上那个负数的补码,这是应该知道的)所以是 1111 1111 + 0000 0001 = 1000 0000 最高位为符号位,溢出的舍去。这表示为-0 则十进制-128.很惊讶么?我知道很多人学了怎么长时间不知道-128~127 范围是-128。 请你搞清楚码补、原码,他们都是二进制表示的。因为计算机电路中只以通电(1)不通电(0)来表示。通过这一序列来描述整个计算机中所有数据。而补码的出现是为了计算负数面设计的,为什么?因为再物理电力中他的处理效率是最优的,即计算机的速度就快,具体微电子业的知识编程人没必要追究到底,了解下就行了~ ^ _ ^
问题四:原码,反码,补码各有什么作用呀 原码:可直观反映出数据的大小。
补码:将加减运算统一为加法运算。
反码:方便原码和补码的相互转换
问题五:简述补码的特点与作用 补码的表示方法
1) 模的概念:把一个计量单位称之为模或模数。例如,时钟是以12进制进行计数循环的,即以12为模。在时钟上,时针加上(正拨)12的整数位或减去(反 拨)12的整数位,时针的位置不变。14点钟在舍去模12后,成为(下午)2点钟(14=14-12=2)。从0点出发逆时针拨10格即减去10小时,也 可看成从0点出发顺时针拨2格(加上2小时),即2点(0-10=-10=-10+12=2)。因此,在模12的前提下,-10可映射为+2。由此可见, 对于一个模数为12的循环系统来说,加2和减10的效果是一样的;因此,在以12为模的系统中,凡是减10的运算都可以用加2来代替,这就把减法问题转化 成加法问题了(注:计算机的硬件结构中只有加法器,所以大部分的运算都必须最终转换为加法)。10和2对模12而言互为补数。
同理,计 算机的运算部件与寄存器都有一定字长的限制(假设字长为8),因此它的运算也是一种模运算。当计数器计满8位也就是256个数后会产生溢出,又从头开始计 数。产生溢出的量就是计数器的模,显然,8位二进制数,它的模数为28=256。在计算中,两个互补的数称为“补码”。
2)补码的表示:
正数:正数的补码和原码相同。
负数:负数的补码则是符号位为“1”,数值部分按位取反后再在末位(最低位)加1。也就是“反码+1”。
例如: 符号位 数值位
[+7]补= 0 0000111 B
[-7]补= 1 1111001 B
补码在微型机中是一种重要的编码形式,有如下特点:
a.采用补码后,可以方便地将减法运算转化成加法运算,运算过程得到简化。正数的补码即是它所表示的数的真值,而负数的补码的数值部份却不是它所表示的数的真值。采用补码进行运算,所得结果仍为补码。
b.与原码、反码不同,数值0的补码只有一个,即 [0]补=00000000B。
c.若字长为8位,则补码所表示的范围为-128~+127
问题六:补码在计算机系统中有什么重要作用 计算机中的符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同。
64位计算机, 所能表示的最大数是13800709551616,若再加1成为13800709551617,但因只有64位,最高位1自然丢失,又回了零,所以64位二进制系统的模为2^64。在这样的系统中减法问题也可以化成加法问题,只需把减数用相应的补数表示就可以了。把补数用到计算机对数的处理上,就是补码。
正整数的补码是其二进制表示,与原码相同。
求负整数的补码,将其对应正数二进制表示所有位取反(包括符号位,0变1,1变0)后加1。同一个数字在不同的补码表示形式中是不同的。比如-15的补码,在8位二进制中是11110001,然而在16位二进制补码表示中,就是1111111111110001。以下都使用8位2进制来表示。
希望我能帮助你解疑释惑。
在C语言中,整数的数值是以补码形式存放的,补码是什么意思啊?
补码的设计目的是:
⑴使符号位能与有效值部分一起参加运算,从而简化运算规则.
⑵使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计
二进制总知道吧?用补码可以把减法当加法,即用加法器做减法
使用补码代表负数,就可以把减法,转化为加法运算。
那么,在计算机中只要有一个加法器,就可以做加、减法了。
使用补码的意义,就是简化了计算机的硬件。
常识:时钟倒拨 3 小时,可以用正拨 9 小时代替。
怎么计算,自己推导吧。
--------
两位十进制数,共有 100 个数字:00~99。
那么,减一,就可以用 +99 代替:
25-1 = 24
25 + 99 = (1) 24
取后两位,忽略进位 100,结果,不就是相同的吗?
只要利用一个“较大的正数”代替负数,就能把减法变加法了。
这个较大的正数,就是负数的补数。
计算公式:-1 的补数=100-1 = 99。
-2 的补数=100-2 = 98。
。。。
--------
计算机中,使用的是二进制。
二进制的补数,就改称为:补码。
八位二进制数,共有 256 个数字:0000 0000~1111 1111。
那么,-1 的补码就是 1111 1111 = 255(十进制)。
同理,-2 的补码就是 1111 1110 = 254(十进制)。
。。。
最后,-128 的补码就是 1000 0000 = 128(十进制)。
计算公式:负数的补码=【256+这个负数】
零和正数,不需要求补数(补码),直接计算即可。
补码是什么意思?
补码
用[x]表示机器数(原码),x是真值(二进制)
x=+0.1001,则[x]原=0.1001
x=-0.1001,则[x]原=1.1001
对于0,原码中有“+0”、“-0”之分,故有两种形式:
[+0]原=0.000...0
[-0]原=1.000...0
采用原码表示法简单易懂,但它的最大缺点是加法运算复杂。这是因为,当两数相加时,如果是同号则数值相加;如果是异号,则要进行减法。而在进行减法时还要比较绝对值的大小,然后大数减去小数,最后还要给结果选择符号。
为了解决这些矛盾,人们找到了补码表示法。机器数的补码可由原码得到。如果机器数是正数,则该机器数的补码与原码一样;如果机器数是负数,则该机器数的补码是对它的原码(除符号位外)各位取反,并在未位加1而得到的。
负数用补码表示时,可以把减法转化为加法。这样,在计算机中实现起来就比较方便
[x]补=
{
x
1>x≥0
{
2+x=2-|x|
0≥x≥-1
x=+0.1011,则[x]补=0.1011
x=-0.1011,则[x]补=10+x=10.0000-0.1011=1.0101
对于0,[+0]补=[-0]补=0.0000
(mod
2)
例子中是以定点小数为例。
补码的原理可以用钟表来描述
如设标准时间为4点正;一只表已经7点了,为了校准时间,可以采用两种方法:一是将时针退
7-4=3
格;一是将时针向前拨12-3=9格。即7-3和7+9(mod12)等价,因此,把负数用补码表示的mod2操作,可以把减法转化为加法。
1
补码
注意:此处的'=='是相等的意思。'='是赋值的意思。
在机器世界里:
正数的最高位是符号位0,负数的最高位是符号位1。
对于正数:反码==补码==原码。
对于负数:反码==除符号位以外的各位取反。
补码==反码+1.
原码==补码-1后的反码==补码的反码+1。(读完本文后,应该能够直观地认识到本式的正确性)
可以轻易发现如下规律:
自然计算 :a-b==c.
计算机计算:a-b==a+b的补码==d.
c的补码是d.
通过此法,可以把减法运算转换为加法运算。
所以补码的设计目的是:
1.使符号位能与有效值部分一起参加运算,从而简化运算规则.
2.减运算转换为加运算,进一步简化计算机中运算器的线路设计.
钟表分针,你正拨 59 分,就相当于,倒拨 1 分钟。
就是说:
-1,可以用+59 代替;
-2,可以用+58 代替;
-3,可以用+57 代替;
……
59、58、57...,就是-1、-2、-3...的补数。
算法就是:[ X ]补 = 60-| X |, 其中的 60,就是“计数周期”。
----------------------------
在计算机中,一个字节,是 8 位 2 进制数。
其数字是:0~255,都是正数。
其计数周期,就是 2^8 = 256。
它们,怎么表示负数呢?
-1,可以用+255 代替;
-2,可以用+254 代替;
-3,可以用+253 代替;
……
-128,就用+128 代替。
以上的 255~128,就是负数(-1~-128)的补码。
而 0 ~ 127,还是照常代表零和正数。也有人叫补码。
----------------------------
因此,可导出 8 位 2 进制数补码的定义式,如下:
正数和零: [ X ]补 = X,
负数: [ X ]补 = 256-| X |。
这里的 256=2^8,是 8 位 2 进制的“计数周期”。
看看计算机方面的书吧,肯定能找到这个定义式。
不要迷信“取反加一”了。
取反加一,说明不了“加法代替减法”!
负数,存放在计算机中,就称为:补码。
--------------
时钟的时针,周期是 12 小时。
倒拨 3 小时,也可以用正拨 9 小时来代替。
9,就是-3 的补数。 补数=周期+负数。
分针倒拨 X 分,也可用正拨 60-X 代替。
60,是周期。
--------------
如果使用两位十进制数 0~99,共 100 个数,周期就是一百。
减一,就可以用 +99 代替:
28 - 1 = 27
28 + 99 = (1) 27
忽略进位(一百),两种算法的结果,就是相同的。
于是,99,就是-1 的补数;
同理,98,就是-2 的补数;
利用【补数】,就可把“负数”改为“正数”。
利用【补数】,就可把“相减”运算,改为“相加”。
求-1 【补数】的计算方法是:
周期 + 负数 = 100 - 1 = 99。
其他负数,也可用此公式计算。
-------------
计算机中,没有数字。 1 和 0,都是代码。
八位二进制,称为一个字节。
0000 0000~1111 1111,共 256 个代码。
对应的十进制是:0~255。 周期就是 256。
-1,就可以用 255 = 1111 1111 (二进制) 代替,
-2,就可以用 254 = 1111 1110 (二进制) 代替,
那么,1111 1111 就称为-1 的补码;
同理,1111 1110 也就是-2 的补码。
。。。
补码的定义式,如下:
负数的补码,就是:周期,加上该负数。
正数,没有补码。必须直接运算,不可变换。
求补码,并不涉及“原码反码符号位 ”这些垃圾知识。
原码反码,在计算机中,都是不存在的。
-------------
补码,有什么意义?
借助于补码,就能用加法,代替减法运算。
那么,计算机中,只需要有一个加法器即可。
这就简化了硬件。
原码和反码,并没有这种功能。
所以,计算机中,只是使用补码。
原码反码,在计算机中,都不存在,根本就不需要讨论。
补码在计算机系统中有什么重要作用
计算机中补码的作用,要从常识中“补数”来理解。
对于钟表,倒拨 3 小时,可以用正拨 9 小时来代替。
对于两位十进制数,共有 100 个数:0~99。
减一,就可以用 +99 代替。
如:28-1 = 27
28 + 99 = (1) 27
忽略 100,结果就相同了。
那么,9 就是-3 的补数、99 就是-1 的补数。
补数,就是用数值较大的正数,代替负数。
利用补数,就可以用加法,代替减法运算。
--------
补码,就是二进制形式的补数。
计算机中八位补码,共有 256 种组合。
那么,负数的补码就是:256 + 这个负数。
那么,数字-1 的补码就是:1111 1111 = 255(十进制)。
同理,数字-2 的补码就是:1111 1110 = 254。
。。。
最终,数字-128 的补码就是:1000 0000 = 128。
求补码,并不需要原码反码。
计算机中,根本也没有原码反码。
原码反码,是毫无用处的东西。
--------
用补码代替负数,就可用加法代替减法运算。
计算机中,只要具有加法器,就够用了。
这就可以简化计算机系统的硬件。