带符号数的原码、反码与补码分析

合集下载

带符号数的表示方法

带符号数的表示方法

带符号数的表示方法
在计算机里呀,带符号数有原码、反码和补码这几种表示方法。

先说说原码吧,原码可直接,它就是把数的符号用一位来表示,正数符号位是0,负数符号位是1,后面跟着这个数的绝对值的二进制表示。

比如说+5,它的原码就是00000101(假设是8位二进制数哦),那 -5的原码就是10000101。

原码很直观,就像咱们平时看数一样,一眼能看出是正还是负。

不过原码在计算的时候有点小麻烦呢。

这时候反码就登场啦。

对于正数,反码和原码是一样一样的。

但是负数的反码呢,就是把原码除了符号位之外的所有位都取反。

像 -5的原码是10000101,那它的反码就是11111010。

反码在做减法的时候会比原码方便一些哦。

补码就更酷啦。

正数的补码还是和原码一样。

负数的补码呢,是它的反码再加1。

还拿 -5来说,反码是11111010,那补码就是11111010 + 1 = 11111011。

补码在计算机里可太重要啦,计算机里很多运算都是用补码来进行的。

因为用补码计算的时候,减法可以当成加法来做,这样就大大简化了计算机的运算电路呢。

咱打个比方,就像你有两种方式去一个地方,原码可能是那种按部就班的走法,反码有点像是换了个思路走,而补码呢,就像是找到了一条超级捷径,能让计算机这个小机灵鬼更快地算出结果。

带符号数的表示

带符号数的表示

(2)定点小数的补码表示[X]补=
X 0≤X<1
(mod 2)
2-|X| -1≤X<0




例: 若X=0.1011,则X补=X=0.1011(mod 2) 若X<0,则X补=M+X=M-|X|。因而负数的 补码等于模M减去该数的绝对值。 例:若X=-0.1011,则 X补=2 - 0.1011=1.0101
2.1.3数的定点表示与浮点表示
第35页,关于溢出的重要概念 3.采用浮点计数法 二进制浮点数就是二进制的科学计数法。 科学计数法是有格式上的要求的,必须按 照严格的格式要求来转化二进制数。
2.1.3数的定点表示与浮点表示
一、浮点表示法
浮点数由一个定点整数和一个定点小数 组成。真值为:N=±REM, R=2 1.浮点数的原理性(格式) 就是科学计数法的二进制延伸。
一、浮点表示法
2.移码(增码) X移=2m+X -2m≤X<2m 移码与补码的表示范围相同,只是在代 码形式上符号位相反而已。 举例: X=-(128)十进制=-(10000000)二进制 上面的两个数分别是十进制和二进制的真值, 设浮点数阶码共8位 移码为X=27+(-10000000)=00000000
一、补码表示法
12
11
10
9
负 数 区 域
正 数 区 域
8
7
6
X
0≤X<2n
(3)定点整数的补码表示[X]补=
(mod 2n+1)
2n+1-|X| -2n≤X<0
例:若X=1011000,则X补=01011000 例:若X=-1011000,则X补=27 -1011000 =10000000- 1011000 =10101000

带符号数的表示

带符号数的表示

2.1.3数的定点表示与浮点表示
一、定点表示法
计算机一次所能计算的二进制数的加减 乘除的位数是有限制的,这就决定了一次 计算是由精度限制的。我们知道,用来存 储数的位数越长,数的精度越高,但是计 算机一次所能运算的长度有限,所以要达 到高精度的运算有以下几个途径: 1.让计算机一次可以做更长的四则运算。 2.用人工分解的办法编制程序,把一个很长 的二进制数的四则运算分解成很多步较短 的二进制运算组合。
(2)定点小数的补码表示[X]补=
X 0≤X<1
(mod 2)
2-|X| -1≤X<0




例: 若X=0.1011,则X补=X=0.1011(mod 2) 若X<0,则X补=M+X=M-|X|。因而负数的 补码等于模M减去该数的绝对值。 例:若X=-0.1011,则 X补=2 - 0.1011=1.0101
一、原码表示法━最高位表正负,其余是 数的绝对值的大小。注意我们在日常生活 中用笔写小数的时候,很轻松的在纸上点 上小数点,但是小数点在计算机中一般是 计算机默认在某一位上,用不着留下空间 专门来存放这个表示点的信号的。
1.定点小数 X0 X1 X2 X3 X4
….. ….. ….. …..
Xn
2.1.2带符号数的表示
2.1.2带符号数的表示
一、补码表示法
补码的补充说明: 就象我们前面所演示给大家看的是补码 的发现其实是为了消灭减法,大家可以用 这样一种思维去理解补码:补码其实就是 专门针对负数而发明出来的,正数根本不 需要什么补码,补码是一个减法的差,所 以求一个数的补码就是做一个减法。
2.1.2带符号数的表示
而四位二进制定点小数的最小表示数只能是

计算机中带符号数的表示之原码、补码、反码

计算机中带符号数的表示之原码、补码、反码

计算机中带符号数的表示之原码、补码、反码计算机中带符号数的表示之原码、补码、反码2010-09-13 12:47为叙述方便,先引进两个名词:机器数和真值。

将一个数在机器中的表示形式,即编码称为机器数,将数本身称为真值。

常用的机器数有三种:原码、补码和反码。

1.原码1)通俗定义将数的符号数码化,即用一个二进制位表示符号:对正数,该位取0,对负数,该位取1。

而数值部分保持数的原有形式(有时需要在高位部分添几个0)。

这样所得结果为该数的原码表示。

例,x=+1001010,y=-1001010,z=-1110(=-0001110)。

当原码为8位时,x、y和z的原码分别是:[x]原=01001010;[y]原=11001010;[Z]原=10001110.其中最高位为符号位。

2)正规定义其中,x为真值,n为原码的位数。

这个定义实际是将真值的范围给出来了,当n=8时,-127 x127,因而,其数值部分写成二进制形式,最多为7位。

从该定义可看出,x为正数时,其原码还是数本身,第8位(符号位)补0;x为负数时,-x等于去掉负号,但要加上127,即第8位为1(127=10000000(2))。

因此,这个定义和上面的通俗定义是一致的。

3)原码表示的特点原码表示有三个主要特点:一是直观,与真值转换很方便;二是进行乘、除运算方便;三是加、减运算比较麻烦。

第一点是显然的。

说原码表示进行乘、除运算方便是因为其数值部分保持了数据的原有形式,对数值部分进行乘或除就可得到积或商的数值部分,而积或商的符号位可由两个数原码的符号位进行逻辑运算而得到。

说原码表示进行加、减运算比较麻烦,以加法为例,两个数相加需先判别符号位,若其不同,实际要做减法,这时需再判断绝对值的大小,用绝对值大的数减绝对值小的数,最后还要决定结果的符号位。

2.补码1)补码的引进和定义据统计,在所有的运算中,加、减运算要占到80%以上,因此,能否方便地进行正、负数加、减运算,直接关系到计算机的运行效率。

原码、反码与补码知识讲解

原码、反码与补码知识讲解

原码、反码与补码知识讲解2.2 原码、反码与补码在计算机内的数(称之为“机器数”)值有3种表示法:原码、反码和补码。

所谓原码就是带正、负号的二进制数,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。

反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。

补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。

由此可见,这三种表示法中,关键是负数的表示方式不一样。

2.2.1 正负数表示、定点数与浮点数在计算机内,通常把1个二进制数的最高位定义为符号位,用“0”表示正数,“1”表示负数;其余位表示数值。

规定小数点位置固定不变的数称为“定点数”;小数点的位置不固定,可以浮动的数称为“浮点数”。

2.2.2 原码原码表示法是定点数的一种简单的表示法。

用原码表示带符号二进制数时,符号位用0表示正,1表示负;数值位保持不变。

原码表示法又称为符号-数值表示法。

1. 小数原码表示法设有一数为x,则原码表示可记作[x]原(下标表示)。

例如,X1= +1010110 ;X2= -1001010原码表示数的范围与二进制位数有关。

设二进制小数X=±0.X1X2…Xm,则小数原码的定义如下:例如:X=+0.1011时,根据以上公式可得[X]原=0.1011;X=-0.1011时,根据以上公式可得[X]原= 1-(-0.1011)=1.1011=1.1011当用8位二进制来表示小数原码时,其表示范围为:最大值为0.1111111,其真值约为(0.99)10 ;最小值为1.1111111,其真值约为(-0.99)10。

根据定义,小数“0”的原码可以表示成0.0…0或1.0…0。

2. 整数原码表示法整数原码的定义如下:例如:X=+1101时,根据以上公式可得[X]原=01101;X=-1101时,根据以上公式可得[X]原=24-(-1101)=10000+1101=11101当用8位二进制来表示整数原码时,其表示范围为:最大值为01111111,其真值为(127)10 ;最小值为11111111,其真值为(-127)10 。

原码反码补码及运算

原码反码补码及运算

原码,反码,补码及运算一、定义 1.原码 正数的符号位为0,负数的符号位为1,其它位按照一般的方法来表示数的绝对值。

用这样的表示方法得到的就是数的原码。

【例2.13】当机器字长为8位二进制数时:X=+1011011 [X]原码=01011011Y=+1011011 [Y]原码=11011011[+1]原码=00000001 [-1]原码=10000001[+127]原码=01111111 [-127]原码=11111111 原码表示的整数范围是: -(2n-1-1)~+(2n-1-1),其中n为机器字长。

则:8位二进制原码表示的整数范围是-127~+12716位二进制原码表示的整数范围是-32767~+32767 2.反码 对于一个带符号的数来说,正数的反码与其原码相同,负数的反码为其原码除符号位以外的各位按位取反。

【例2.14】当机器字长为8位二进制数时: X=+1011011 [X]原码=01011011 [X]反码=01011011 Y=-1011011 [Y]原码=11011011 [Y]反码=10100100 [+1]反码=00000001 [-1]反码=11111110 [+127]反码=01111111 [-127]反码=10000000 负数的反码与负数的原码有很大的区别,反码通常用作求补码过程中的中间形式。

反码表示的整数范围与原码相同。

3.补码 正数的补码与其原码相同,负数的补码为其反码在最低位加1。

引入补码以后,计算机中的加减运算都可以统一化为补码的加法运算,其符号位也参与运算。

【例2.15】(1)X=+1011011 (2)Y=-1011011 (1)根据定义有:[X]原码=01011011 [X]补码=01011011 (2)根据定义有:[Y]原码=11011011 [Y]反码=10100100 [Y]补码=10100101 补码表示的整数范围是-2n-1~+(2n-1-1),其中n为机器字长。

01-2带符号数的代码表示

01-2带符号数的代码表示

原码小数的表示范围:
[+0]原 =0.0000000 ; [-0]原 =1.0000000
最大值 : 1- 2-(n-1) 最小值:-(1- 2-(n-1)) 表示数的个数: 2n - 1
例 若二进制原码小数的位数分别是8、 16位,求其该数表示的最大值、最小值及 所能表示数的个数?
数的符号位:数的最高位
数的符号在r进制数中的表示
正数:0
负数:r-1
数的符号在二进制数中的表示
正数:0
负数:1
9 1=64+16+8+2+1 例 如,
( + 9 1)10 = (+ 1011011)2 ( - 9 1)10 =(- 1011011)2
……真值 ……真值
机器只能认识二进制数,因此数的正与负 必须用二进制数来表示。用0和1两个代码表示 正和负,并规定一个数的最高位为符号位。从 而得到机器数。
1 0 0 0 0010 [X+Y]补=10000010
X+Y的真值 ( -130)10 8位计算机数值表达范围:(-128 ~+127) 运算结果超出机器数值范围发生溢出错误。
补码运算特点:
在无溢础的情况下,符号位与数值 位一同直接参加运算。
直接丢模(符号位的进位位)。 补码可将减法变加法进行运算。 已知Y补,求(-Y)补的方法为连符号
位一起直接求补。
指出:由于采用补码可把减法化成加法,因 此,机器中的+、-、×、÷运算,均归结为一 种加法运算,从而使计算机的硬软结构非常简单。 为此,机器中带符号的数,无论是正数或负数均 采用补码形式,而运算的结果也是补码形式。
1.2.6 十进制数的补数

原码、反码、补码的简单转换

原码、反码、补码的简单转换

原码、反码、补码的简单转换1、正数的原码、反码、补码是⼀样的如+1011111(95)的原码、反码、补码为:原码 0101 1111反码 0101 1111补码 0101 11112、负数的原码、反码、补码转换以-1011111(-95)的原码、补码、反码的转换为例:(1)负数原码、反码转换符号位不变,数值位按位取反原码转反码原码 1101 1111反码 1010 0000 //符号位不变,数值位按位取反反码转原码反码 1010 0000原码 1101 1111 //符号位不变,数值位按位取反(2)负数原码、补码转换符号位不变,数值位按位取反,末位+1原码转补码原码 1101 1111反码 1010 0000 //符号位不变,数值位按位取反补码 1010 0001 //末位+1快速求法为:符号位不变,从右往左找第⼀个1,这个1左边的取反,右边的不变补码转原码补码 1010 00011101 1110 //符号位不变,数值位按位取反为原码 1101 1111 //末位+1(3)负数反码、补码转换反码转补码,末位+1;补码转反码,末位-1反码转补码反码 1010 0000补码 1010 0001 //末位+1补码转反码补码 1010 0001反码 1010 0000 //末位-13、总结:正数的原码、补码、反码都⼀样;负数的原码、反码转换:符号位不变,数值位按位取反;负数的原码、补码转换:符号位不变,数值位按位取反,末位+1,【快速求法为:符号位不变,从右往左找第⼀个1,这个1左边的取反,右边的不变】;负数的反码、补码转换:反码转补码,末位+1;补码转反码,末位-1。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一.带符号数的原码、反码与补码
所谓带符号数,其实就是一个二进制数据,它的最高位所代表的是符号,其余位是其“绝对值”。

例如0101_0011,这个数据如果是带符号数,那么最高位的0就是代表这个数据为正数,其后的101-0011则代表这个数据的绝对值,为+83D。

如果是1101_0011,则代表-83D。

1.1 原码
原码就是按照正数的符号位为0,负数的符号位为1,其他位就是数据的绝对值即可。

例如当机器字长为8bit的二进制数时,它的最高位为符号位,因此其余的7bit位数据的绝对值。

因此原码所能表示的数据范围是:
- (2n-1-1)~+(2n-1-1)
当字长为8bit,则原码能表示的范围就是:-127~+127
例如83的原码就是:0101_0011
当字长为16bit,则原码能表示的范围就是:-32767~+32767
例如-83的原码就是:1000_0000_0101_0011
1.2 反码
对于一个带有符号位的二进制数来说,正数的反码与其原码相同,负数的反码为其原码除符号位外其余各位按位取反。

例如当字长为8bit时,+83D的反码就是:0101_0011,-83D的反码就是1010_1100
负数的反码与原码有很大的差别,一般情况下,反码主要用来当做求二进制数补码的中间形式。

反码所表示的数据范围与原码相同:
- (2n-1-1)~+(2n-1-1)
1.2 补码
正数的补码与其原码相同,负数的补码为其反码在最低位加1。

例如:
X=+101_1011 [X]原码=0101_1011 [X]补码=0101_1011
X=-101_1011 [X]原码=1101_1011 [X]补码=1010_0101
补码表示的范围是:
- 2n-1~+(2n-1-1)
当字长为8bit,则原码能表示的范围就是:-128~+127
当字长为16bit,则原码能表示的范围就是:-32768~+32767
关于0,它有两个补码:
正零:0000_0000
负零:1000_0000
二.通过补码求解原值的方法
1)对于正数,它的原值与补码相同;
2)对于负数,它的原值就是将补码除符号位以外,安位取反之后,末位加1。

例如【X】=0101_1001,由于最高位是0,因此是正数,原值与补码相同,也是0101_1001,转换成10进制就是+89D。

【X】=1101_1010,由于最高位是1,因此原值是负数,符号位外其余各位安位取反为:1010_0101,然后末位加1可得到原值:1010_0110,就是-38D。

三.利用补码进行加减运算
3.1 加法运算
对于加法运算,首先需要计算【X+Y】补,然后再经过补码转原码的方式获得原值。

【X+Y】补=【X】补+【Y】补
例如:X=+011_0011 Y=-010_1001 即:X=+51D, Y=-41D
则【X】原=0011_0011 【X】反=0011_0011 【X】补=0011_0011
【Y】原=1010_1001 【Y】反=1101_0110 【Y】补=1101_0111
因此【X+Y】补=【X】补+【Y】补=0011_0011+1101_0111=0000_1010,再换原码为+10D。

3.2 减法运算
对于减法运算,首先需要计算【X-Y】补,然后再经过补码转原码的方式获得原值。

例如:X=+011_1001 Y=+100_1101 即:X=+57D, Y=+77D
则【X】原=0011_1001 【X】反=0011_1001 【X】补=0011_1001
【-Y】原=1100_1101 【-Y】反=1011_0010 【-Y】补=1011_0011
因此【X-Y】补=【X】补+【-Y】补=0011_1001+1011_0011=1110_1100,将【X-Y】补低7位进行取反,为1001_0011,再将其末位加1,可得【X-Y】原=1001_0100,转换成10进制
的数即为-20D。

由此可知,补码的意义就是可以把所有的加法与减法都转换成加法进行计算,这样非常适用于计算机进行运算处理。

四.关于求补码的深入讨论
通过上面这个表可知,-128如果用8bit的二进制数表示就是1000_0000,“反码+1”的计算方法并不适用-128,所以-128这个数比较特殊,需要特殊记忆。

其实求一个数的补码,按照补码最原始的定义,其实就是正数与原码相同,而负数采用“模减去绝对值”的方法来求,这是求补数的通用方法,适合于各种进制、各种大小数字。

下面就从计算机的角度深入理解补码的概念。

4.1 模与补数的概念
在日常生活当中,可以看到很多这样的事情:
把某物体左转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。

用补数代替原数,可把减法转变为加法。

出现的进位就是模,此时的进位,就应该忽略不计。

4.2 二进制数的模
前面说过的十进制数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。

注意:这里提到的1、0,都是二进制数。

8 位二进制数的模可以按照十进制写成2^8,即256。

16 位数二进制数的模,就是2^16,按照十进制,它就是65536。

4.3 二进制数的补码
前面说过的十进制数2二进制数的补码,求二进制数的补数,目的是往计算机里面存储。

在计算机里面,存放的数字什么的,都称为机器码;那么二进制形式的补数,也就改称为补码了。

一般情况下,都是以8 位二进制数来讨论补码,少数也有用16 位数的。

计算时加上正数,是不需要进行求取补数的;只有进行减法(或者加上负数),才需要对减数求补数。

补码就是按照这个要求来定义的:正数不变,负数即用模减去绝对值。

已知一个数X,其8 位字长的补码定义为:
(1) 正数:X ; 0 <= X <= +127 (正数和0的补码,就是该数字本身)
(2) 负数:2^8 -|X| ; -128 <= X < 0 (负数的补码,其实就是用1 0000 0000 (2的8次方),减去该数字的绝对值)。

例如X = -126,其补码为1000 0010,计算方法如下:
1 0000 0000
-0111 1110
-----------
1000 0010
可以看出,按照补码的定义来求补码,概念十分清晰,方法、步骤也是十分简单的。

应用补码进行计算
用补码计算:83-25=58。

83 ---都变成补码,再用加法运算--> 0101 0011
-25 -> 1 0000 0000 - 0001 1001-> + 1110 0111
-------------
58 <--忽略进位1,结果就是正确的--> [1]0011 1010
计算结果如果超出了-128~+127的范围,结果将是错误的,这是没有办法纠正的。

应用补码进行计算,完全符合前面介绍的“用补数可把减法转换成加法”的做法,只要忽略进位(这个进位1,就是求补的时候,加进去的1 0000 0000中的1),结果就是正确的。

相关文档
最新文档