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

合集下载

带符号数的表示方法

带符号数的表示方法

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

先说说原码吧,原码可直接,它就是把数的符号用一位来表示,正数符号位是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。

原码补码反码

原码补码反码

原码表示法:带符号数在机器中的表示方法就是原码表示法。

正数用0表示,负数用1表示。

例:+1001010的原码为01001010,-1001010的原码为11001010反码表示法:正数的反码和原码一样;负数的反码与原码不同,而是原码的符号位不变,数值部分逐步求反。

例1:反码表示+101。

先将其用八位二进制表示为00000101(第一位为符号位,0表示正数)再反码表示为00000101(正数原码补码相同)例2:反码表示-101.先将其用八位二进制表示为10000101(第一位为符号位,1表示负数)再反码表示为1111010(符号位不变,其余位求反即1变0,0变1)结论:用八位二进制表示一个数十反码最高位为符号位,当符号位为0(正数)时,后面7位与原码相同;符号位为1(负数)时,后面7位与原码相反。

补码表示法:正数的补码与原码相同,负数的补码等于它的反码末位加1.例1:原码:00000101,,其补码为00000101(正数补码原码相同)例2:原码:10000101,其补码为其反码加1,即为11111010+1=11111011原码与补码的相互转换:(仅负数,正数原码补码相同)1.原码转补码:符号位不变,数值部分求反加12.补码转原码:补码的补码即原码,即补码求反加1为原码。

课本后习题最后两题(P47)7.(1)+7原码为00000111,反码为00000111,补码为00000111-7原码为10000111,反码为11111000,补码为11111001(2)自己写(^.^)(^.^)(^.^)8.(1)补码11111111转换成原码为10000000+1=10000001,其真值为-1(2)嘿嘿嘿嘿嘿(3)^_~ ^_~ ^_~ ^_~ ^_~。

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

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

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

例如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_00111.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_1011X=-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。

二进制原码、反码和补码-带符号数的机器码表示方法

二进制原码、反码和补码-带符号数的机器码表示方法

原码、反码和补码 —— 带符号数的机器码表示方法1.带符号二进制数的表示方法:2、符号位的表示:最常用的表示方法有原码、反码和补码。

(1)原码表示法一个机器数x 由符号位和有效数值两部分组成,设符号位为x 0,x 真值的绝对值|x|=x 1x 2x 3...x n ,则x 的机器数原码可表示为:[x]原= n x x x x ...210,当x>=0时,x 0=0,当x<0时,x 0=1。

例如:已知:x 1=-1011B ,x 2= +1001B ,则x 1,x 2有原码分别是[x 1] 原=11011B ,[x 2]原=01001B规律:正数的原码是它本身,负数的原码是取绝对值后,在最高位(左端)补“1”。

(2)反码表示法一个负数的原码符号位不变,其余各位按位取反就是机器数的反码表示法。

正数的反码与原码相同。

按位取反的意思是该位上是1的,就变成0,该位上是0的就变成1。

即1=0,0=1例:B x 10111-=,B x 10012+=,求反][1x 和反][2x 。

解:反][1x =B 10100,反][2x =B 01001(3)补码表示法首先分析两个十进制数的运算:78-38=41,79+62=141如果使用两位数的运算器,做79+62时,多余的100因为超出了运算器两位数的范围而自动丢弃,这样在做78-38的减法时,用79+62的加法同样可以得到正确结果。

模是批一个计量系统的测量范围,其大小以计量进位制的基数为底数,位数为指数的幂。

如两位十进制数的测量范围是1——9,溢出量是100,模就是102=100,上述运算称为模运算,可以写作:79+(-38)=79+62 (mod 100)进一步写为 -38=62,此时就说 –38的补法(对模100而言)是62。

计算机是一种有限字长的数字系统,因此它的运算都是有模运算,超出模的运算结果都将溢出。

n 位二进制的模是2n ,一个数的补码记作[x]补,设模是M ,x 是真值,则补码的定义如下:⎩⎨⎧<+≥=)0()0(][][x x M x x x 原补例:设字长n=8位,x=-1011011B ,求[x]补。

计算机中的原码、反码和补码

计算机中的原码、反码和补码

大家都知道数据在计算机中都是按字节来储存了,1个字节等于8位(1Byte=8bit),而计算机只能识别0和1这两个数,所以根据排列,1个字节能代表256种不同的信息,即28(0和1两种可能,8位排列),比如定义一个字节大小的无符号整数(unsigned char),那么它能表示的是0~255(0~ 28-1)这些数,一共是256个数,因为,前面说了,一个字节只能表示256种不同的信息。

别停下,还是一个字节的无符号整数,我们来进一步剖析它,0是这些数中最小的一个,我们先假设它在计算机内部就用8位二进制表示为00000000(从理论上来说也可以表示成其他不同的二进制码,只要这256个数每个数对应的二进制码都不相同就可以了),再假设1表示为00000001,2表示为00000010,3表示为00000011,依次类推,那么最大的那个数255在8位二进制中就表示为最大的数11111111,然后,我们把这些二进制码换算成十进制看看,会发现刚好和我们假设的数是相同的,而事实上,在计算机中,无符号的整数就是按这个原理来储存的,所以告诉你一个无符号的整数的二进制码,你就可以知道这个数是多少,而且知道在计算机中,这个数本身就是以这个二进制码来储存的。

比如我给你一个2个字节大小的二进制码,首先声明它表示的是无符号的整数:00000000 00000010,我们把前面的0省略,换算一下,它表示的也是数值2,和前面不同的是,它占了2个字节的内存。

不同的类型占的内存空间不同,如在我的电脑中char是1个字节,int是4个字节,long是8个字节(你的可能不同,这取决于不同的计算机设置),它们的不同之处仅仅是内存大的能表示的不同的信息多些,也就是能表示的数范围更大些(unsigned int能表示的范围是0~28*4-1),至于怎么算,其实都是一样的,直接把二进制与十进制相互转换,二进制就是它在计算机中的样子,十进制就是我们所表示的数(误解:不同的计算机储存的原理是不同的,取决于商家的喜好呢)。

原码,反码,补码及运算

原码,反码,补码及运算

原码,反码,补码及运算一、定义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~+327672.反码对于一个带符号的数来说,正数的反码与其原码相同,负数的反码为其原码除符号位以外的各位按位取反。

【基准2.14】当机器字长为8十一位二进制数时:x=+1011011[x]原码=01011011[x]反码=01011011y=-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为机器字长。

原码,反码,补码,移码的概念以及各自的用途和优点

原码,反码,补码,移码的概念以及各自的用途和优点

原码,反码,补码,移码的概念以及各⾃的⽤途和优点1.原码将最⾼位⽤作符号位(0表⽰正数,1表⽰负数),其余各位代表数值本⾝的绝对值的表⽰形式。

例如,假设⽤8位表⽰⼀个数,则+10的原码是00001010,-10的原码是10001010。

直接使⽤原码在计算时会有⿇烦,例如,(1)10+(-1)10=0。

如果直接使⽤原码,则(00000001)2+(10000001)2=(10000010)2这样计算的结果是-2也就是说,使⽤原码直接参与计算可能会出现错误的结果。

所以,原码的符号位不能直接参与计算,必须和其他位分开,这样会增加硬件的开销和复杂性。

2.反码正数的反码与原码相同。

负数的反码符号位为1,其余各位为该数绝对值的原码按位取反。

例如,-11的反码是11110100。

同样,对上⾯的加法,使⽤反码的结果是:(00000001)2+(11111110)2=(11111111)2这样的结果是负0。

⽽在⼈们普遍的观念中,0是不分正负的。

反码的符号位可以直接引参与计算,⽽且减法也可以转换为加法计算。

3.补码正数的补码与原码相同。

负数的补码是该数的反码加1,这个加1就是“补”。

例如-11的补码为11110100+1=11110101再次做以上的加法,是这样的:+(11111111)2=(00000000)2(00000001)2这说明,直接使⽤补码进⾏计算的结果是正确的。

对⼀个补码表⽰的数,要计算其原码,只要对它再次求补即可。

由于补码能使符号位与有效值部分⼀起参与运算,从⽽简化了运算规则,同时它也使减法运算转换为加法运算,进⼀步简化计算机中运算器的电路,这使得在⼤部分计算机系统中,数据都使⽤补码表⽰。

4.移码移码⼜称为增码,移码的符号表⽰和补码相反,1表⽰正数,0表⽰负数。

也就是就是说,移码是在补码的基础上把⾸位取反得到的,这样使得移码⾮常适合于阶码的运算,所以移码常⽤于表⽰阶码。

对于正数:原码和反码,补码都是⼀样的,都是正数本⾝。

符号位;原码,反码,补码

符号位;原码,反码,补码

符号位;原码,反码,补码1 符号位计算机如何存储数据,因为计算机世界⾥⾯所有的数据归根结底都是由0和1来存储的,那么如何表达数值的正负呢?只知道书本上说是有⼀个符号位,当该符号位为0时,表⽰的是正数,为1时表⽰负数。

我那时没搞懂为什么这样规定,我觉得1么,代表正数挺合理的,那么0就⾃然表⽰负数咯,所以不解,只能死记硬背:0正1负。

当代绝⼤多数计算机表⽰浮点数都是采⽤IEEE标准的,这⾥简化⼀下,我们只关⼼符号位,那么对于⼀个数,计算机其实是以下⾯的式⼦来描述它的:(-1)s×X,这⾥的指数s就是⽤来决定数值X是正数还是负数,显⽽易见,当s=0时,则X为正数(因为任何数的0次幂都是1),当s=1时,则X为负数(因为-1的1次幂为-1),⾄此我们就理解了为什么符号位为0时表⽰正数,为1时表⽰负数啦。

2 机器数 ⼀个数在计算机中的⼆进制表⽰形式,叫做这个数的机器数。

机器数是带符号的,在计算机⽤⼀个数的最⾼位存放符号,正数为0,负数为1.⽐如,⼗进制中整数+3,若计算机字长为8位,转换为⼆进制数为 0000 0000 0000 0000 0000 0000 0000 0011;如果是-3,就是1000 0000 0000 0000 0000 0000 0000 0011。

3 真值 因为第⼀位是符号位,所以机器数的形式值就不等于真正的数值。

例如:有符号数的真值如下 1000 0000 0000 0000 0000 0000 0000 0011的真值 = -000 0000 0000 0000 0000 0000 0000 0011 = -3; 0000 0000 0000 0000 0000 0000 0000 0011的真值 = +000 0000 0000 0000 0000 0000 0000 0011 = +34 原码,反码,补码的基础概念和计算⽅法 对于⼀个数,计算机要使⽤⼀定的编码⽅式进⾏存储,原码,反码,补码都是机器存储⼀个具体数字的编码⽅式。

什么是原码、反码、补码

什么是原码、反码、补码

[-1] = [10000001]原 = [11111110]反 = [11111111]补
对于负数, 补码表示方式也是人脑无法直观看出其数值的. 通常也需要转换成原码在计算其数值.
三. 为何要使用原码, 反码和补码
在开始深入学习前, 我的学习建议是先"死记硬背"上面的原码, 反码和补码的表示方式以及计算方法.
1-1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [0000 0001]补 + [1111 1111]补 = [0000 0000]补=[0000 0000]原
这样0用[0000 0000]表示, 而以前出现问题的-0则不存在了.而且可以用[1000 0000]表示-128:
于是人们开始探索 将符号位参与运算, 并且只保留加法的方法. 首先来看原码:
计算十进制的表达式: 1-1=0
1 - 1 = 1 + (-1) = [00000001]原 + [10000001]原 = [10000010]原 = -2
如果用原码表示, 让符号位也参与计算, 显然对于减法来说, 结果是不正确的.这也就是为何计算机内部不使用原码表示一个数.
一. 机器数和真值
在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念.
1、机器数
一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1.
比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是00000011。如果是 -3 ,就是 10000011 。
x mod y = x - y L x / y J

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

原码、反码与补码知识讲解
“模”实质上是计量器产生“溢出”的量,它的值在计量器上表示不出来,计量 器上只能表示出模的余数。任何有模的计量器,均可化减法为加法运算。 对于计算机,模也就是相应位数寄存器所能表示的最大数再加。如位寄存器所能 存储的数是,这样位寄存器的模就等于。rqyn1。rqyn1。
码、阶码与移码
小数“”的补码只有一种表示形式,即…。 . 整数补码表示法 设二进制整数±…,则其补码定义为: 例如, 时,根据以上公式可得[]补 ; 时,根据以上公式可得[] 补 。同样,整数“”的补码也只有一种表示形式,即…。采用补码进行加、减 运算时,可以将加、减运算均通过加法实现,运算规则如下: LDAYt。LDAYt。 [ ]补 []补 []补
分别是[]补和[] 补。
“非”运算实现逻辑否定,即进行求反运算,非运算规则: , 。注意“非”运
补码的减法运算规则是:
算只是针对一个数所进行的“运算”,这与前面的“与”和“或”运算不一样。它的实
[-]补[]补+[-]补
3/4
个人收集整理-ZQ 质意义就是取反。如“”进行“非”运算后就得到“”,对比相应位即可验证以上运算 规则了。sQsAE。sQsAE。
正负数表示、定点数与浮点数 在计算机内,通常把个二进制数的最高位定义为符号位,用“”表示正数,“” 表示负数;其余位表示数值。 规定小数点位置固定不变的数称为“定点数”;小数点的位置不固定,可以浮 动的数称为“浮点数”。 原码 原码表示法是定点数的一种简单的表示法。用原码表示带符号二进制数时, 符号位用表示正,表示负;数值位保持不变。原码表示法又称为符号数值表示 法。b5E2R。b5E2R。 . 小数原码表示法 设有一数为,则原码表示可记作[]原(下标表示)。例如, + ; 原码表示数的范围与二进制位数有关。设二进制小数±…,则小数原码的定 义如下: 例如:时, 根据以上公式可得[]原;-时,根据以上公式可得[]原 ()

原码,补码,反码和有符合,无符号整数知识总结

原码,补码,反码和有符合,无符号整数知识总结

原码,补码,反码和有符合,⽆符号整数知识总结原码 (true form)是⼀种中对数字的定点表⽰⽅法。

原码表⽰法在数值前⾯增加了⼀位符号位(即最⾼位为符号位):该位为0,负数该位为1(0有两种表⽰:+0和-0),其余位表⽰数值的⼤⼩。

例如,我们⽤8位表⽰⼀个数,+11的原码为00001011,-11的原码就是10001011不能直接参加运算,可能会出错。

例如数学上,1+(-1)=0,⽽在中原码00000001+10000001=10000010,换算成为-2。

显然出错了。

所以计算机并不是以原码的形式存储整数的。

反码:正数的反码与其原码相同;负数的反码是对正数逐位取反,符号位保持为1。

例如对于⼆进制原码10010求反码:11101。

例如,我们⽤8位表⽰⼀个数,+11的反码为00001011(和原码⼀样),-11的反码就是1111 0100(把-11的原码10001011 符号位保持1,数值为取反)虽然反码能存储数值,但是我们很容易可以看到,这样存储⽅式很不容易被⼈类思维理解。

所以多数计算机不采⽤反码表⽰数值补码:正整数的补码是其⼆进制表⽰,与相同。

求负整数的补码,将其原码除符号位外的所有位取反(0变1,1变0,符号位为1不变)后加1。

例如,我们⽤8位表⽰⼀个数,+11的补码为00001011,-11的补码就是1111 0101(把-11的原码10001011 符号位保持1,数值为取反,得到数之后再+1)。

从上⾯的例⼦可以看出,对于负数来说,补码=原码的反码+1,对于正数来说补码=原码=反码。

我们⽤4个Bit 来做个⽰例:⼗进制数原码反码补码+70111表⽰⽅式不变表⽰⽅式不变+60110表⽰⽅式不变表⽰⽅式不变+50101表⽰⽅式不变表⽰⽅式不变+40100表⽰⽅式不变表⽰⽅式不变+30011表⽰⽅式不变表⽰⽅式不变+20010表⽰⽅式不变表⽰⽅式不变+10001表⽰⽅式不变表⽰⽅式不变+00000表⽰⽅式不变表⽰⽅式不变-010001111[1]0000-1100111101111-2101011011110-3101111001101-4110010111100-5110110101011-6111010011010-7111110001001-8超出4个bit所能表达范围超出4个表达范围1000计算机中的符号数有三种表⽰⽅法,即、和补码。

  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),结果就是正确的。

相关文档
最新文档