补码是什么,什么是补码?
补码是什么,什么是补码?详细介绍
本文目录一览: 什么是补码?
余3码(1),就是10进制数 3转换成的4位二进制数,如果两个十进制数相加的等于10,二进制正好等于16,高位自动产生进位信号。此外0和9、1和8、2和7、3和6、4和5的余3码互为补码(2421码中也是),这对求取对10的补码是很方便的。余3码不是恒权代码(2421码为恒权码)。
探究的一般过程是从发现问题、提出问题开始的,发现问题后,根据自己已有的知识和生活经验对问题的答案作出假设.设计探究的方案,包括选择材料、设计方法步骤等.按照探究方案进行探究,得到结果,再分析所得的结果与假设是否相符,从而得出结论.并不是所有的问题都一次探究得到正确的结论.有时,由于探究的方法不够完善,也可能得出错误的结论.因此,在得出结论后,还需要对整个探究过程进行反思.探究实验的一般方法步骤:提出问题、做出假设、制定计划、实施计划、得出结论、表达和交流.
科学探究常用的方法有观察法、实验法、调查法和资料分析法等.
观察是科学探究的一种基本方法.科学观察可以直接用肉眼,也可以借助放大镜、显微镜等仪器,或利用照相机、录像机、摄像机等工具,有时还需要测量.科学的观察要有明确的目的;观察时要全面、细致、实事求是,并及时记录下来;要有计划、要耐心;要积极思考,及时记录;要交流看法、进行讨论.实验方案的设计要紧紧围绕提出的问题和假设来进行.在研究一种条件对研究对象的影响时,所进行的除了这种条件不同外,其它条件都相同的实验,叫做对照实验.一般步骤:发现并提出问题;收集与问题相关的信息;作出假设;设计实验方案;实施实验并记录;分析实验现象;得出结论.调查是科学探究的常用方法之一.调查时首先要明确调查目的和调查对象,制订合理的调查方案.调查过程中有时因为调查的范围很大,就要选取一部分调查对象作为样本.调查过程中要如实记录.对调查的结果要进行整理和分析,有时要用数学方法进行统计.收集和分析资料也是科学探究的常用方法之一.收集资料的途径有多种.去图书管查阅书刊报纸,拜访有关人士,上网收索.其中资料的形式包括文字、图片、数据以及音像资料等.对获得的资料要进行整理和分析,从中寻找答案和探究线索
补码,是一个“代替负数”的正数。
使用了补码,计算机中,就没有负数了,同时,也就没有了减法运算。
因此,使用补码,就可以简化算法,简化硬件。
此后,计算机,只用一个加法器,就可以走遍天下。
------------------
补码(即正数),怎么就能代替负数呢?
其理论源自于“周期性”的特点。
当你用 2 位 10 进制数(0~99),周期就是 10^2 = 100。
此时:25 - 1 = 24
25 99 = (进位 1) 24
你如果舍弃进位,仅保留两位, 99 就能代替-1。
同时,加法,也就代替了减法。
99,就称为-1 的补数。
算法:补数=负数+周期。
------------------
对于 8 位 2 进制数,周期是 2^8 = 256。
-1 的补码是:-1 256 = 255 = 1111 1111。
。。。
正数,必须直接参加运算,不可变换。
所以,正数,并没有补码。
------------------
计算机只用补码,数值,一律用补码表示和存储。
原码和反码,都是无用的。
计算机中,也没有原码和反码。
取反加一符号位不变,这些,都没有理论基础。
不学也罢。
补码是什么请回答好吗
给二进制数取反加一得到补码,比如:11100011--->00011100(按位取反)--->00011101(加1)
注意正数的补码是原数
补码,就是二进制的补数。
什么是补数? 通过常识,就可以理解了。
时钟,倒拨 3 小时,可用 正拨 9 小时 代替。
两位十进制数:00~99,共有 100 个。
那么,减一,可用 99 代替。
24-1 = 23
24 99 = (1) 23
忽略进位,只取低两位,结果就是一样的。
那么,-1 的补数,就是 99。
同理,-2 的补数,就是 98。
。。。
利用补数,就可以把减法转化为加法运算。
--------
计算机用二进制,“补数”就改称为“补码”了。
八位二进制数:0000 0000~1111 1111,共有 256 个。
那么,减一,可用加 1111 1111 代替。
因此,-1 的补码,就是 1111 1111 = 255(十进制)。
同理,-2 的补码,就是 1111 1110 = 254(十进制)。
。。。
最后,-128 的补码,就是 1000 0000 = 128(十进制)。
--------
求负数的补码,公式就是:2 的 N 次方+该负数。
可以用十进制来计算,不用写成二进制。
什么是补码
在计算机系统中,数值,一律采用补码表示和存储。
计算机中,并不用原码和反码,它们也根本就不存在。
---------------------
补码,实际上,就是一个“代替负数”的正数。
使用了补码之后,计算机中,就没有负数了。
同时,也就没有减法运算了。
计算机,只要配置一个加法器,就能横行天下了。
补码的作用就是:简化算法,从而简化硬件。
---------------------
补码(一个正数),怎么就能代替负数呢?
想一想周期性的规律吧。
比如, 2 位 10 进制数(0~99),计数周期就是 10^2=100。
可有: 25 - 1 = 24
25 + 99 = (一百) 24
只要你舍弃进位,只保留 2 位数, 99 就能代替-1 !
而且,加法,也能代替减法运算!
同样, 98 也可以代替-2。
。。。
这些代替负数的正数,就称为“负数的补数”。
求补数的公式,显然就是:
补数 = 负数 + 10^n
式中:n 是补数的位数。
10^n,是 n 位 10 进制数的周期。
在三角函数中,这种公式,也有雷同的表现。
三角函数,是以 2π 为周期的。
任何负角度,加上周期,就可以转换为正角度。
如:x =-π/2,这是一个负角度。
与其等效的正角度,则为:
x =-π/2 2π = 3π/2。
-------------------
在计算机中,也可以使用“补数”。
计算机大佬为了标新立异,故弄虚玄,就称为:补码。
求负数的补码,公式,仍然是:
补码 = 负数 + 计数周期 (2^n),n 是补码的位数。
一个字节,有 8 位 2 进制数,计数周期就是 2^8 = 256。
那么,
-1 的补码就是 255 = 1111 1111 (二进制);
-2 的补码就是 254 = 1111 1110 (二进制);
。。。
-128 的补码就是 128 = 1000 0000 (二进制)。
正数,不用转换,也不许做任何转换,必须直接去参加算。
所以,零和正数,并没有补码。
-------------------
求补码,不需要“符号位原码反码取反加一符号位不变”。
那一大堆步骤,并没有什么数学理论依据。
数学不好的老外,弄不懂“周期、等效”,才用那些骚操作。
计算机专业老师水平太低、盲目跟风,骗人骗己。
让大家学了这些,一丁点用处,也都没有的。
补码是计算机中表示符号数的方法之一,用来表示和储存计算机系统中的数值。
计算机中的符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同。使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。
什么是补码
所谓补码就是在二进制(源码)情况下,按位取反,最后在取反后的数上加1,就成补码了。
楼上介绍的,都是求补码的方法。
并不是“什么是补码”的答案。
很多人,只是会求补码,却不懂什么是补码。
补码,实际上,是“代表负数运算”的正数。
比如, 2 位 10 进制的运算,可有:
25 - 1 = 24
25 + 99 = (1) 24
舍弃进位的 1 百, 99 就和-1 的功能完全相同。
加法,也就能代替减法运算。
同样, 98 也可以代替-2。
这些正数,就称为负数的补数。
求补数的公式,大家都能推出来,就是:
补数=负数+10^n
式中:n 是补数的位数。
10^n,是 n 位 10 进制数的周期。
这公式,在三角函数中,也有雷同的表现。
三角函数,是以 2π 为周期的。
任何负的角度,加上周期,就可以转换为正的角度。
如:x =-π/2,其等效的角,即为:
x =-π/2 =-π/2 2π = 3π/2
-------------------
计算机用二进制,补数,就称为:补码。
对于 8 位 2 进制,求补码的公式是:
补码=负数+2^8=负数+256
256,就是 8 位二进制数的计数周期。
那么,
-1 的补码就是 255=1111 1111(二进制)。
-2 的补码就是 254=1111 1110(二进制)。
。。。
-128 的补码就是 128=1000 0000(二进制)。
-------------------
求补码,不需要“原码反码符号位取反加一”。
那些个操作,都没有什么数学理论依据。
老外的数学不好,才会弄出那些烂事。
若原码是正数,则其补码为它本身;若原码为负数,则其补码为反码加1。
不如说:
对于011011 第一位为符号位,为‘0’,则为正数,所以其补码为:011011
对于111011 第一位为‘1’,则为负数,其反码为其原码取反,为:100100,其补码为100101
补码是:正负数,在计算机中的存放方式。
数学有个规律:
减一个数,和加一个数,有可能是相同的。
比如: 25 - 1 = 24
25 + 99 = (1) 24
忽略进位的 1 百,结果就完全相同。
-1,其补数,就是 99。(= 100-1)
-2,其补数,就是 98。(= 100-2)
。。。
利用补数,即可:把减法,转为加法,来计算。
而加法(或正数),直接算,即可,不用转换。
即:正数,不用变换。
负数,则需要“用进位值,加上,该负数”。
---------
在计算机内部,不用十进制,用二进制。
补数,也改称:补码。
通常用八位二进制来分析,其进位就是:1 0000 0000。
-1 的补码是:1111 1111。(= 10000 0000-1)
-2 的补码是:1111 1110。(= 10000 0000-10)
。。。
其余可自行推导。
补码是什么意思?
在计算机系统中,数值,一律采用补码表示和存储。
原码和反码,在计算机中,都是没用的,也都是不存在的。
补码的来源,得从“补数”谈起。
你看 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。
---------------------
求补码,用“原码反码取反加一符号位不变”就费事了。
那些说法,都没有任何理论依据。
而且,也说不明白“补码是什么意思?”。
老外算术不行,也弄不懂周期的意思,才编造出这些骚操作。
我们的计算机专业老师,跟风讲这些,就是想多赚点课时费而已。
正数的补码就是原码本身,负数的补码是其反码加1。
计算机中的有符号数有即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”。在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。
补码:在反码的基础上加1,这样可以方便计算机进行计算,可以让“最高位符号位都能参与计算”。原码:字节的最高位为符号位,其余表示数值大小,最简单;反码:正数的反码和原码一样,负数的反码除最高位符号位外,其他位都取反。
补码
补码“模”概念的引入、负数补码的实质、以及补码和真值之间的关系所揭示的补码符号位所具有的数学特征,无不体现了补码在计算机中表示数值型数据的优势,解决了符号的表示的问题,克服了原码加减法运算繁杂的弊端,可有效简化运算器的设计。
补码表示统一了符号位和数值位,使得符号位可以和数值位一起直接参与运算,这也为后面设计乘法器除法器等运算器件提供了极大的方便。补码概念的引入和当时运算器设计的背景不无关系,考虑到了数据存储和处理所需要的硬件代价。
以上内容参考 百度百科——补码
补码是什么意思?
补码
用[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 的补码。
。。。
补码的定义式,如下:
负数的补码,就是:周期,加上该负数。
正数,没有补码。必须直接运算,不可变换。
求补码,并不涉及“原码反码符号位 ”这些垃圾知识。
原码反码,在计算机中,都是不存在的。
-------------
补码,有什么意义?
借助于补码,就能用加法,代替减法运算。
那么,计算机中,只需要有一个加法器即可。
这就简化了硬件。
原码和反码,并没有这种功能。
所以,计算机中,只是使用补码。
原码反码,在计算机中,都不存在,根本就不需要讨论。
什么叫做补码?
补码补码举例 1、在计算机系统中,数值一律用补码来表示(存储)。
主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补
码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。
2、补码与原码的转换过程几乎是相同的。
数值的补码表示也分两种情况:
(1)正数的补码:与原码相同。
例如, 9的补码是00001001。
(2)负数的补码:符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。
例如,-7的补码:因为是负数,则符号位为“1”,整个为10000111;其余7位为-7的绝对值 7的原码
0000111按位取反为1111000;再加1,所以-7的补码是11111001。
已知一个数的补码,求原码的操作分两种情况:
(1)如果补码的符号位为“0”,表示是一个正数,所以补码就是该数的原码。
(2)如果补码的符号位为“1”,表示是一个负数,求原码的操作可以是:符号位为1,其余各位取
反,然后再整个数加1。
例如,已知一个补码为11111001,则原码是10000111(-7):因为符号位为“1”,表示是一个负
数,所以该位不变,仍为“1”;其余7位1111001取反后为0000110;再加1,所以是10000111。
在“闲扯原码、反码、补码”文件中,没有提到一个很重要的概念“模”。我在这里稍微介绍一下“模”
的概念:
“模”是指一个计量系统的计数范围。如时钟等。计算机也可以看成一个计量机器,它也有一个计量范
围,即都存在一个“模”。例如:
时钟的计量范围是0~11,模=12。
表示n位的计算机计量范围是0~2^(n)-1,模=2^(n)。
“模”实质上是计量器产生“溢出”的量,它的值在计量器上表示不出来,计量器上只能表示出模的
余数。任何有模的计量器,均可化减法为加法运算。
例如: 假设当前时针指向10点,而准确时间是6点,调整时间可有以下两种拨法:
一种是倒拨4小时,即:10-4=6
另一种是顺拨8小时:10 8=12 6=6
在以12模的系统中,加8和减4效果是一样的,因此凡是减4运算,都可以用加8来代替。
对“模”而言,8和4互为补数。实际上以12模的系统中,11和1,10和2,9和3,7和5,6和6都有这个特
性。共同的特点是两者相加等于模。
对于计算机,其概念和方法完全一样。n位计算机,设n=8, 所能表示的最大数是11111111,若再
加1称为100000000(9位),但因只有8位,最高位1自然丢失。又回了00000000,所以8位二进制系统的
模为2^8。 在这样的系统中减法问题也可以化成加法问题,只需把减数用相应的补数表示就可以
了。把补数用到计算机对数的处理上,就是补码。
另外两个概念
一的补码(one's complement) 指的是正数=原码,负数=反码
而二的补码(two's complement) 指的就是通常所指的补码。
这里补充补码的代数加减运算:
1、补码加法
[X Y]补 = [X]补 [Y]补
【例7】X= 0110011,Y=-0101001,求[X Y]补
[X]补=00110011 [Y]补=11010111
[X Y]补 = [X]补 [Y]补 = 00110011 11010111=00001010
注:因为计算机中运算器的位长是固定的,上述运算中产生的最高位进位将丢掉,所以结果不是
100001010,而是00001010。
2、补码减法
[X-Y]补 = [X]补 - [Y]补 = [X]补 [-Y]补
其中[-Y]补称为负补,求负补的方法是:对补码的每一位(包括符号位)求反,最后末位加“1”。
这里补充补码的代数解释:
任何一个数都可以表示为-a=2^(n-1)-2^(n-1)-a;
这个假设a为正数,那么-a就是负数。而根据二进制转十进制数的方法,我们可以把a表示为:a=k0*2^0 k1*2^1 k2*2^2 …… k(n-2)*2^(n-2)
这里k0,k1,k2,k(n-2)是1或者0,而且这里设a的二进制位数为n位,即其模为2^(n-1),而2^(n-1)其二项展开是:1 2^0 2^1 2^2 …… 2^(n-2),而式子:-a=2^(n-1)-2^(n-1)-a中,2^(n-1)-a代入a=k0*2^0 k1*2^1 k2*2^2 …… k(n-2)*2^(n-2)和2^(n-1)=1 2^0 2^1 2^2 …… 2^(n-2)两式,2^(n-1)-a=(1-k(n-2))*2^(n-2) (1-k(n-3))*2^(n-3) …… (1-k2)*2^2 (1-k1)*2^1 (1-k0)*2^0 1,而这步转化正是取反再加1的规则的代数原理所在。因为这里k0,k1,k2,k3……不是0就是1,所以1-k0,1-k1,1-k2的运算就是二进制下的取反,而为什么要加1,追溯起来就是2^(n-1)的二项展开式最后还有一项1的缘故。而-a=2^(n-1)-2^(n-1)-a中,还有-2^(n-1)这项未解释,这项就是补码里首位的1,首位1在转化为十进制时要乘上2^(n-1),这正是n位二进制的模。
不能贴公式,所以看起来很麻烦,如果写成代数式子看起来是很方便的。
注:n位二进制,最高位为符号位,因此表示的数值范围-2^(n-1) ——2^(n-1) -1,所以模为2^(n-1)。上面提到的8位二进制模为2^8是因为最高位非符号位,表示的数值范围为0——2^8-1。
1、补码就是把减法当加法计算,采用进位丢失得到计算结果时应该补够的数。
2、任何进制的数都有补码,不只是二进制数有补码。
3、以十进制为例:100-15要变成进位丢失的加法计算时,可以采用1000-15得到15的补码是985,这样100 985=1085,由于进位是丢的(或说抛弃进位),所以得到085也就是85,二进制补码也是这个意思。
4、二进制求补码的方法是对二进制数按位进行取反,然后再加上1得到。(这只是二进制补码的求法,不是补码的概念。)
计算机中的存储系统都是用2进制储存的,对我们输入的每一个信息它都会自动转变成二进制的形式,而二进制在存储的时候就会用到原码,反码和补码
例如:十进制 -10
原码就是:10001010
反码: 11110101
补码: 11110110
原码是信息的二进制表示
反码就是把它的原码除符号位都取反(0变1,1变0)
补码是在反码的末位上加1
不过正数的原反补码是相同的
这点要注意
学VB对这有个了解就行了
计算机里面,只有加法器,没有减法器,
减法,必须用加法来完成。
对于 100 以内的十进制数,《减1》,就可以用《加 99》代替。
比如 25 - 1 = 24,可以写成 25 + 99 = (1)24。
限定了两位数,-1 和 +99 是等效的。
同样,-2,可以用 +98 代替。
……
它们之间,称为《补数》。
100 称为《模》。
利用《模》,求某个负数的《补数》,小学生都会。
---------------------------
对于 8 位二进制数:0000 0000~1111 1111(255),模为256。
-1,可以用 255(1111 1111)代替。
-2,可以用 254(1111 1110)代替。
……
这些二进制数,就称为负数的《补码》。
已知一个负数,求其补码,用模计算一下,大家都能算出来。
求补码,完全可以用十进制数来计算。
原码、反码、求反加一、符号位,这些都是用不着的,瞎忽悠人的。
0的补码是00000000。
假设机器的位长为0,正数x的最高位为0,其余位为数x的值
(8位长为例)
[ 0]补= 0 000 000
负数x的补码表示为2^n-|x|
[-0]补 = 2^n = 10000 0000 = 0000 0000
综合[0]补=0000 0000
计算机中的符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同。
在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。
求给定数值的补码分以下两种情况:
正数
正整数的补码是其二进制表示,与原码相同
负数
求负整数的补码,将其对应正数二进制表示所有位取反(包括符号位,0变1,1变0)后加1 。
同一个数字在不同的补码表示形式中是不同的。比如-15的补码,在8位二进制中是11110001,然而在16位二进制补码表示中,就是1111111111110001。以下都使用8位2进制来表示。
补码是用来解决负数在计算机中的表示问题的。正数的补码就是其本身;负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后 1. (即在反码的基础上 1)。
例:1-1 = 1 (-1) = 00000001(原码) 100000001(原码) =00000001(反码) 11111110(反码) = 11111111(反码)=10000000(原码) = -0
用反码运算时,结果为-0,虽然 0和-0都是0,但是看起来总是觉得怪怪的,何况0带符号没有任何意义,并且出现了两个能表示0的二进制数00000000和10000000。这让严谨的程序员们如何能接受,为了消除歧义,于是出现了反码。
扩展资料
补码这个编码方案要解决的是如何在机器中表示负数,其本质意义为用一个正数来表示这个正数对应的负数。所谓-20的补码是指:如何在机器中用补码形式表示-20。
具体过程是这样的:将20的二进制形式直接写出00010100,然后所有位取反变成11101011,再加1变成了11101100。最简单的补码转换方式,不必去理会转换过程中的符号位,只关注转换前和最终转换后的符号位就行。
补码的总前提是机器数,不要忘了机器数的符号位含义,最高位为0表示正数,最高位为1表示负数,而最高位是指机器字长的最左边一位。字节数100B,最高位为00000100中的最左边的0。
参考资料来源:百度百科-补码
什么是补码
正负数字,存放在计算机中,就称为:补码。
正数,就直接以二进制存放。
负数,则需要变换一下,再存放。
--------------
如果,仅使用两位十进制数,就是 00~99,共有 100 个数字。
减一,就可以用 99 代替:
28 - 1 = 27
28 99 = (1) 27
忽略进位,结果就是相同的。
于是,99,就是-1 的补数;
同理,98,就是-1 的补数;
利用【补数】,就可把“相减”运算,改为“相加”。
利用【补数】,就可把“负数”改为“正数”。
对于“-1”,其对应的【补数】就是:100-1 = 99。
-------------
计算机中,没有数字。1 和 0,都是代码。
八位二进制代码,称为一个字节。
0000 0000~1111 1111,共有 256 个代码。
-1,就可以用 256- 1 = 255 (=1111 1111) 代替,
-2,就可以用 256- 2 = 254 (=1111 1110) 代替,
那么,1111 1111 就称为-1 的补码;
同理,1111 1110 也就是-2 的补码。
-------------
计算机中,只有加法器,没有减法器。
做减法运算,必须使用【补码】,用加法来操作。
补码的定义式,如下:
正数的补码,就是该数字本身。
负数的补码,就用“模”,加上该负数,即可。
求补码,并不需要“原码反码符号位 ”这些垃圾知识。
补码的定义式如下。
X >= 0: [ X ]补 = X
X < 0: [ X ]补 = 2^n - | X |
一般的计算机专业的书上,都有的。
补码=反码 1
补码(two's complement) 1、在计算机系统中,数值一律用补码来表示(存储)。 主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补 码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。
补码
注意:此处的'=='是相等的意思。'='是赋值的意思。
在机器世界里:
正数的最高位是符号位0,负数的最高位是符号位1。
对于正数:反码==补码==原码。
对于负数:反码==除符号位以外的各位取反。
补码==反码 1.
原码==补码-1后的反码==补码的反码+1。(读完本文后,应该能够直观地认识到本式的正确性)
可以轻易发现如下规律:
自然计算 :a-b==c.
计算机计算:a-b==a b的补码==d.
c的补码是d.
通过此法,可以把减法运算转换为加法运算。
所以补码的设计目的是:
1.使符号位能与有效值部分一起参加运算,从而简化运算规则.
2.减运算转换为加运算,进一步简化计算机中运算器的线路设计.
如果还有什么疑问的请参考百度百科中的 补码
什么是补码?什么是原码?
在计算机系统中,数值,一律采用补码表示和存储。
计算机,并不使用原码和反码
在计算机中,原码和反码,也都不存在。
讨论原码反码,又有什么意义呢?
---------------------
补码,其实,它就是一个【代替负数】的正数。
使用了补码之后,在计算机中,就没有负数了。
顺便,也就消除了减法运算。
那么,计算机只需配置一个加法器,就可以走遍天下了。
---------------------
补码(即一个正数),怎么就能【代替负数】呢?
理论基础在于:计数系统的周期性。
比如,2 位 10 进制数(0~99),计数周期就是 10^2 = 100。
那么: 25 - 1 = 24
25 99 = (一百) 24
只要你:舍弃进位,仅保留 2 位数, 99 就能代替-1。
同理, 98 也能代替-2。
。。。
这些正数,就可以称为“负数的补数”。
变换公式: 负数的补数 = 负数 + 周期。
另外还有:
时针,周期是 12,倒拨 3 小时、正拨 9 小时,等效吧?
三角函数的周期是 2π,-π/2、 3π/2,正、负角度,也等效。
。。。
这些负数变正数,公式都是: 正数 = 负数 + 周期。
反之,也成立,即: 负数 = 正数 - 周期。
---------------------
计算机中,8 位 2 进制数,周期就是 2^8 = 256。
-1 的补码,就是:-1 256 = 255 = 1111 1111(二进制)。
-2 的补码,就是:254 = 1111 1110(二进制)。
。。。
求补码,用“负数+周期”,直接就能求出补码。
不必经过“原码反码取反加一符号位不变”。
数学不好的老外,才需要弄哪些骚操作!
---------------------
只有负数,才需要变换成补码(正数)。
正数,不需要变换,也不允许变换,必须直接去相加运算。
所以,正数,它就没有补码。
有人说:正数的。。。都相同。
这就是被老外带到沟里去了。
原码反码,在计算机中,都是不存在的,哪还有什么相同!
8位字长原码表示的有符号定点小数真值范围:1.1111111b~ 0.1111111b,即: -(127D/128)d ~ (127/128)d。
8位字长补码表示的有符号定点小数范围: -1.0000000b ~ 0.1111111b,即: -1d ~ (127/128)d。
补码的一些信息:
补码(2's complement)是一种用二进制表示有号数的方法,也是一种将数字的正负号变号的方式,常在计算机科学中使用。在台湾地区通常称为二补数。
一个数字的补码就是将该数字作比特反相运算(即一补数或反码),再将结果加 1,即为该数字的补码。在补码系统中,一个负数就是用其对应正数的补码来表示。
补码系统的最大优点是可以在加法或减法处理中,不需因为数字的正负而使用不同的计算方式。只要一种加法电路就可以处理各种有符号数加法,而且减法可以用一个数加上另一个数的补码来表示,因此只要有加法电路及补码电路即可完成各种有号数加法及减法,在电路设计上相当方便。
另外,补码系统的 0 只有一个表示方式,这点和一补数系统不同(在一补数系统中,0 有二种表示方式),因此在判断数字是否为 0 时,只要比较一次即可。