有关补码的知识及运算规则
- 格式:doc
- 大小:52.50 KB
- 文档页数:7
-8的四位补码题目:8的四位补码的计算及应用导语:计算机科学和信息技术领域中,二进制数和补码的概念是基础且重要的知识点。
本文将以8的四位补码为主题,逐步解释补码的计算方式,并探讨补码在计算机中的应用。
一、补码的定义和计算方式补码是一种表示负数的二进制编码。
在计算机中,通常使用补码来存储和表示有符号数。
补码的计算方式如下:1. 正数的补码与其本身相同。
例如,+8的二进制表示是00001000,其补码也是00001000。
2. 负数的补码是其二进制表示的反码加1。
例如,-8的二进制表示是10001000,其补码的计算方式如下:- 取其二进制表示的反码,即将0替换为1,1替换为0:01110111- 然后将反码加1:01110111 + 1 = 01111000所以,-8的四位补码是01111000。
二、计算机中补码的原理和优势在计算机中,使用补码表示负数有以下原因和优势:1. 一致性和连续性:采用补码表示时,对于计算机硬件来说,无论是处理正数还是负数,都可以使用相同的逻辑和算法来处理。
这大大简化了硬件电路设计和编程。
2. 补码的唯一表示:补码方式可以唯一地表示负数,而且不会出现“正零”和“负零”的情况。
3. 加减运算的简化:使用补码进行加法运算时,可以直接将两个补码相加,不需要考虑符号位和正负数的差异。
这大大简化了加法电路的设计和运算过程。
4. 减法运算的转换:将减法运算转化为加法运算,通过对减数取反再加上被减数的补码即可。
这样就可以使用相同的加法器电路来处理减法运算。
三、补码的应用案例:计算机中的数值范围和二进制运算补码广泛应用于计算机中的数值范围表示和二进制运算中。
下面以8的四位补码为例,讨论其在计算机中的应用:1. 数值范围表示:8的四位补码表示了在计算机中可以表示的负数的最大范围和最小范围。
其中,最大范围是(-2^3),即-8,对应补码01111000;最小范围是(2^3-1),即+7,对应补码00000111。
原码,反码,补码及其运算
1)简述
原码: ⽤来转换对应进制.
反码: ⼆进制码0变1,1变0叫做反码,反码⽤于原码补码之间的转换.(符号位不变)。
补码: ⽤来做数据的存储运算. 补码提出的根源是让计算机底层的实现减法操作(可以表达出⼀个数的正负)。
2)运算规则
(原码反码补码之间的转换 , 符号位不要动)
正数: 原码 = 反码 = 补码
负数: 原码 = 补码取反加1 给补码求原码
负数: 补码 = 原码取反加1 给原码求补码
求12 +(- 15) = ?
补码⽤来做数据的存储运算,因此先求12和-15的补码
12的补码(=反码=原码):0000 1100(⾼位为0,表⽰正数)
-15的原码: 1000 1111 (⾼位为1,表⽰负数,转换为10进制时,⾼位的1不⽤进⾏换算)
反码: 1111 0000 (原码取反)
补码: 1111 0001 (反码加1)
补码做相加运算
12的补码: 0000 1100
-15的补码: 1111 0001
-------------
结果(补码): 1111 1101
补码再转换为原码(即补码的补码,同样做取反加1换算)
补码: 1111 1101(⾼位为1,表⽰负数,进⾏补码反码原码换算时是不变的)
反码: 1000 0010(补码取反)
原码: 1000 0011(反码加1)
10进制: -3。
补码运算规则
补码运算在计算机运算中被普遍应用,是一种高效的数据表示方式。
所谓补码,就是一种数值表示法,使用一种称为“补码”的编码形式表示一个二进制数,它是一个二进制形式的整数,加1或减1后形成不同的结果。
补码运算规则是采用补码表示二进制数,经过加法和减法运算成另一个补码,
根据它们之间的关系来进行处理,进而得出结果。
补码运算可以避免溢出,也使计算机能进行快速的运算,并减少计算机的解释和编程的复杂度。
补码运算机制的特点比较多。
首先,补码运算可以消除符号扩展问题,这就是
补码可以将正数和负数的值用同样的位数来表示;其次,补码可以很容易的实现简单的加减运算,从而大大减少运算量;最后,它具有容易解释和简单编程的特点,这样计算机可以很容易地理解和编程。
补码运算对计算机和网络系统都非常重要。
计算机正是利用它来处理大量的数据,实现更快的处理速度和更高的准确性,而网络系统则依靠其来加强网络通信能力,提高网络传输效率。
通过使用补码运算,我们可以得到更完善的计算机系统和网络通信系统,这将对数字信息技术发展产生重大影响。
2.1 原码、反码与补码在计算机内的数(称之为“机器数”)值有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 。
一.补码的加、减运算在计算机中,通常总是用补码完成算术的加减法运算。
其规则是:[X+Y]补= [X]补+ [Y]补,[X-Y]补= [X]补- [Y]补= [X]补+ [-Y]补这表明,有了补码表示的被加(减)数和加(减)数,要完成计算补码表示的二数之和或二数之差,只需用二数的补码直接执行加减运算即可,符号位与数值位同等对待,一起参加运算,若运算结果不溢出,即不超出计算机所能表示的范围,则结果的符号位和数值位同时为正确值。
此外,还可以看到,实现减运算时,用的仍是加法器线路,把减数的负数的补码送加法器即可。
在有了一个数的补码之后,求这个数的负数的补码,是简单地把这个数的补码逐位取反再在最低位加1即可得到。
例如,[Y]补=101101,则[-Y]补=010011,这大大简化了加减运算所用的线路和加减运算的实现算法。
下面的问题是如何检查加减运算中的溢出问题。
通常有三种表述方式(说法):(1) 两个符号相同的补码数相加,如果和的符号与加数的符号相反,或两个符号相反的补码数相减,差的符号与减数的符号相同,都属于运算结果溢出。
这种判别方法比较复杂,要区别加还是减两种不同运算情况,还要检查结果的符号与其中一个操作数的符号的同异,故很少使用;(2) 两个补码数相加减时,若最高数值位向符号位送的进位值与符号位送向更高位的进位值不相同,也是运算结果溢出。
(3) 在采用双符号位(如定点小数的模4补码)运算时,若两个符号位的得值不同(01或10)则是溢出。
01表明两个正数相加,结果大于机器所能表示的最大正数,称为"上溢";10表明两个负数相加,结果小于机器所能表示的最小负数,称为"下溢";双符号位的高位符号位,不管结果溢出否,均是运算结果正确的符号位,这个结论在乘法运算过程中是很有实际意义的。
请注意,在采用双符号位的方案中,在寄存器和内存储器存储数据时,只需存一位符号,双符号位仅用在加法器线路部分。
二进制补码:定义、计算方法、特点和应用二进制补码是一种用二进制表示有符号整数的方法,它可以使正数和负数的加减法运算更加简单和高效。
本文将介绍二进制补码的定义、计算方法、特点和应用,以及与原码和反码的区别和联系。
一、二进制补码的定义在计算机中,通常用一个固定长度的二进制数来表示一个有符号整数,其中最高位为符号位,0表示正数,1表示负数,其余位为数值位。
例如,用一个8位的二进制数来表示十进制数-5,可以写成10000101,其中第一位1是符号位,表示这是一个负数,后面七位0000101是数值位,表示这个数的绝对值是5。
但是,在计算机中,不同的二进制表示方法会导致不同的运算规则和结果。
为了方便计算机进行有符号整数的加减法运算,人们提出了三种不同的二进制表示方法:原码、反码和补码。
其中,补码是最常用的一种方法,它的定义如下:正数的补码等于其原码,即符号位为0,数值位为其二进制形式。
负数的补码等于其原码除符号位外按位取反再加1,即符号位为1,数值位为其绝对值的二进制形式按位取反再加1。
例如,用一个8位的二进制数来表示十进制数5和-5的补码,可以写成:十进制原码补码50000010100000101-51000010111111011可以看出,正数的补码和原码相同,而负数的补码是在原码的基础上除符号位外按位取反再加1得到的。
例如,-5的原码是10000101,除符号位外按位取反得到11111010,再加1得到11111011。
二、二进制补码的计算方法在计算机中进行有符号整数的加减法运算时,通常先将操作数转换成补码形式,然后按照无符号整数的加减法规则进行运算,最后将结果转换成原码形式输出。
下面介绍如何进行这些步骤。
2.1 将原码转换成补码将原码转换成补码的方法很简单,只需要根据前面给出的定义进行操作即可。
具体步骤如下:如果原码表示的是正数,则直接保留原码作为补码。
如果原码表示的是负数,则除符号位外按位取反再加1得到补码。
1的补码运算1的补码是计算机中表示负数的一种方法。
在计算机中,负数使用补码表示,而正数直接使用原码表示。
补码的运算规则与原码相同,但是在进行加法运算时,需要考虑进位的问题。
本文将详细介绍1的补码运算的原理和应用。
我们需要了解什么是补码。
补码是一种用来表示负数的编码方式,它是对原码进行取反操作,并在最高位加1得到的结果。
例如,对于一个8位的二进制数,原码为00000001,其补码为11111111。
补码的运算规则与原码相同,但是在进行加法运算时,需要考虑进位的问题。
当两个补码进行加法运算时,如果最高位产生了进位,则需要将进位加到结果中。
如果最高位没有产生进位,则结果与原码相同。
例如,计算1的补码加1的结果。
首先,将1的补码表示为00000001。
然后,将1的补码加1,得到的结果为00000010。
由于最高位没有产生进位,所以结果与原码相同,即为2的补码表示。
补码的运算不仅适用于加法,还适用于减法。
当进行减法运算时,可以将减数取反得到补码表示,然后进行加法运算。
例如,计算1的补码减1的结果。
首先,将1的补码表示为00000001。
然后,将1的补码取反得到11111110,再加1,得到的结果为11111111。
由于最高位没有产生进位,所以结果与原码相同,即为-1的补码表示。
补码的运算在计算机中得到广泛应用。
由于补码的运算规则与原码相同,且不需要进行特殊处理,所以可以简化计算机的运算逻辑。
同时,补码还可以表示更大的数值范围,因为最高位不再表示符号位,而是参与运算。
这使得计算机可以处理更大的数值,提高了计算机的运算效率。
除了加法和减法运算,补码还可以用于乘法和除法运算。
在乘法运算中,可以将乘数和被乘数都转换为补码表示,然后进行加法运算。
在除法运算中,可以将除数和被除数都转换为补码表示,然后进行减法运算。
这样,计算机可以使用相同的运算逻辑,同时处理加法、减法、乘法和除法运算。
补码的运算在计算机中发挥着重要的作用。
数字逻辑概论华中科技大学罗杰补码的加减运算加减运算是计算机中最基本的运算。
加减运算可以用原码、补码、BCD码等各种码制进行。
补码运算可以把减法转换为加法,现代计算机中均采用补码进行加减运算。
◆假设X和Y均为正数,则补码的运算规则如下:[ X ]补+ [ Y ]补= [ X+Y ]补(mod M)两个数的补码之和等于两数之和的补码。
[ X ]补-[ Y ]补= [ X ]补+ [ -Y ]补= [ X-Y ]补(mod M)两个数的补码之差等于两数之差的补码。
◆注意:参与运算的操作数均为补码,运算的结果仍然以补码表示。
运算时,符号位和数值位按同样的规则参加运算,结果的符号位由运算得出。
补码总是对确定的模而言,如果运算结果超过了模,则应将模(即进位)丢掉才能得到正确结果。
求15 –13 = ?(用补码)0000110100001111(15)(13)( 2 )000000100000111111110011+(15)补(-13)补( 2)补1进位111000000101111舍弃进位∵(15–13)补= (15 )补–(13)补= (15 )补+ (–13)补直接做减法运算转换为补码做加法运算◆注意:在进行二进制补码的加法运算时,被加数与加数的位数要相等,即让两个二进制数补码的符号位对齐。
两个二进制数的补码要采用相同的位数表示。
求13 –15 = ?(用补码)1111000100001101+(13)补(-15)补(-2)补0进位00011111110010∵(13-15 )补= (13 )补+ (–15)补求–13 –15 = ?(用补码)1111000111110011+(-13)补(-15)补(-28)补0进位11011100100111因为(-13-15 )补= (-13 )补+ (–15)补1舍弃进位求125+58 = ?(用补码)0011101001111101+(125)补( 58)补(183)补进位111101101111因为(125+58 )补= (125)补+ (58)补错误原因是:8位有符号数所能表示的补码数的最大值为127.这里,183 > 127,导致结果错误。
计算机中补码的数学运算逻辑及证明1. 问题我们知道,在计算机中是⽤补码来存放实际的正负数的,那么计算机为什么要⽤补码来存放数据,计算机课本中,那个补码 = 反码 + 1的公式⼜是怎么来的?要了解这些问题的答案,我们先要了解⼀些基本的知识,最基本的同余公式这⾥就不讲了,看本帖之前需要去离散数学或数论中了解下基本的同余运算即可。
2. 计算机的字长和同余计算计算机的字长是指计算机运算时,能存放的最⼤数字的的位长,如我们常说的32位机,字长就是32位的,寄存器只有32bit,最多能放32个1,能表达的最⼤数字就是232 - 1当超过这个数字后,由于⽆法存储,会被计算机丢弃,同时会设置CPU的溢出标志位,这就是所谓的溢出为了简单,我们⽤8位机来做演⽰,即最⼤能表⽰的数字是28 - 1记m = 28所以,计算机的计算 (a + b)时,实际上计算的是 (a + b) % m (mod m),超过m的部分都会被丢弃,只取余数的部分,即计算机中的计算实际都是⼀个模m的同余计算如 1000 0000 + 1000 0001 = 1 0000 0001由于最⾼位超出最⼤能够表⽰的数,多出的位将溢出丢弃,所以最后的结果为 0000 0001 = 13. 补码的定义和计算设m > b >= 0,b为整数则b的补 b = m – b (注意,这⾥定义的是补,⽽不是补码,不要弄混了)由于有正负数,计算机中对正负数的补码进⾏了区分定义:1> 正整数b的补码为⾃⾝,即b的补码仍为b2> 负整数-b的补码为b的补,即b我们知道,a - b即可转化为 a + (-b),如果⽤补码来运算a –b = a + (-b) (mod m) 在计算机中计算的是 a + b (mod m)那么他们的同余吗(即他们模m后的值相等吗)?∵ b = m – b∴ a + b = a + (m – b)≡ a – b (mod m)∴将负数转化为补码进⾏计算后,仍然是成⽴的所以,计算机中⽤补码来储存所有的数后,就不需要增加减法器了,⽤加法器就可以代替计算减法,这样能节省电路设计,当然,这还只是其中的⼀个好处之⼀4. 负数的表⽰和运算前⾯讲了计算机中⽤补码来存储数字,我们知道,在8位机中,-1的补码为 1111 1111 = 255,那么在8位机中,这个数字即可以表⽰是-1的补码,也可以表⽰是255的补码,这就产⽣⼀个冲突了。
计算机基础理论:原码、反码、补码、移码一、标准理论1、原码的定义①小数原码的定义[X]原=X 0≤X <11- X -1 <X ≤ 0例如:X=+0.1011 , [X]原= 01011 X=-0.1011 [X]原= 11011②整数原码的定义[X]原=X 0≤X <2n2n-X - 2n <X ≤ 02、补码的定义①小数补码的定义[X]补=X 0≤X <12+ X -1 ≤ X < 0例如:X=+0.1011, [X]补= 01011 X=-0.1011, [X]补= 10101②整数补码的定义[X]补=X 0≤X <2n2n+1+X - 2n≤ X < 03、反码的定义①小数反码的定义[X]反=X 0≤X <12-2n-1-X -1 <X ≤ 0例如:X=+0.1011 [X]反= 01011 X=-0.1011 [X]反= 10100②整数反码的定义[X]反=X 0≤X <2n2n+1-1-X - 2n<X ≤ 04.移码:移码只用于表示浮点数的阶码,所以只用于整数。
①移码的定义:设由1位符号位和n位数值位组成的阶码,则[X]移=2n + X -2n≤X ≤ 2n例如:X=+1011 [X]移=11011 符号位“1”表示正号X=-1011 [X]移=00101 符号位“0”表示负号②移码与补码的关系:[X]移与[X]补的关系是符号位互为反码,例如:X=+1011 [X]移=11011 [X]补=01011X=-1011 [X]移=00101 [X]补=10101③移码运算应注意的问题:◎对移码运算的结果需要加以修正,修正量为2n,即对结果的符号位取反后才是移码形式的正确结果。
◎移码表示中,0有唯一的编码——1000…00,当出现000…00时(表示-2n),属于浮点数下溢。
二、补码加、减运算规则1、运算规则[X+Y]补= [X]补+[Y]补[X-Y]补= [X]补+[-Y]补若已知[Y]补,求[-Y]补的方法是:将[Y]补的各位(包括符号位)逐位取反再在最低位加1即可。
原码反码补码知识点一、知识概述《原码反码补码知识点》①基本定义:- 原码呢,就是一种最简单的机器数表示法。
就是把这个数直接写成二进制的形式,最左边那位是符号位,0表示正数,1表示负数,后面跟着这个数的绝对值对应的二进制数。
比如数字5,它的原码(假设是8位)就是;要是-5呢,那就是。
- 反码,正数的反码跟原码一样。
负数的反码呢,就是在原码的基础上,除了符号位,其他的位都取反,就像照镜子一样,0变1,1变0。
好比-5的原码是,那它的反码就是。
- 补码也挺有意思的。
正数的补码跟原码相同。
负数的补码是先求反码,然后在反码的最低位加1。
还说-5吧,它的反码是,补码就是了。
②重要程度:在计算机的运算里,原码、反码和补码可太重要了。
计算机只能处理0和1的二进制数据,通过这几种码的转换,才能准确地进行算术运算和逻辑判断呢,就像汽车需要油才能跑起来一样,计算机做这些运算就离不开它们。
③前置知识:得先对二进制有个基本的了解,知道怎么把一个十进制数转换成二进制数,还有位运算的一些基本知识,像与、或、非这种基本操作。
要是连二进制都搞不明白,那原码反码补码就像天书一样喽。
④应用价值:在计算机的处理器运算中,比如说简单的加法减法,都离不开原码反码补码的转换。
在很多编程操作里,当涉及到对内存中的数据进行数值计算的时候,这也是必须知道的内容。
就好像建房子必须有砖一样,做计算机底层的编码或者高效率运算,这些码就是基础的“砖”。
二、知识体系①知识图谱:在计算机科学中,原码反码补码属于计算机数值表示和运算这个知识板块里面的基础内容。
它们和二进制运算、计算机的算术逻辑单元等知识都有紧密联系。
②关联知识:和数据的存储方式有关联,像在内存中数据是按照这些码的形式存放的,还和计算机的指令系统有关联。
比如处理器的指令集在执行加、减、乘、除等运算时,就需要先理解这些数是怎么表示的,也就是原码反码补码。
③重难点分析:- 重点就是能够准确地根据正负和给定的十进制数转换出原码、反码和补码,并且在它们之间熟练转换。
二进制减法运算法则补码摘要:1.二进制减法的基本概念2.补码的概念和原理3.二进制减法的补码运算方法4.实例演示5.总结与展望正文:在我们日常生活和工作中,二进制数制的应用越来越广泛。
掌握二进制减法运算及其补码算法,对于处理二进制数据具有重要意义。
本文将详细介绍二进制减法运算法则补码,并通过实例进行演示。
首先,我们来了解一下二进制减法的基本概念。
二进制减法是指在二进制数制下进行的减法运算。
由于二进制数制只有0和1两个数字,因此在进行减法运算时,可能会遇到借位的情况。
在这种情况下,我们需要将借位的数字加上负数位的权重,以实现二进制减法运算。
接下来,我们来介绍补码的概念和原理。
补码是一种数字表示方法,它可以使得二进制数在加法和减法运算中具有简单的运算规则。
在补码表示中,正数的补码为其本身,负数的补码为其对应的正数按位取反再加1。
这样,当我们进行二进制减法运算时,可以将减法转化为加法运算,即求被减数与减数的补码和。
那么,如何进行二进制减法的补码运算呢?我们可以按照以下步骤进行:1.将被减数和减数转换为补码表示。
2.将两个补码数进行按位相加,注意进位。
3.最后得到的补码数即为二进制减法的结果。
接下来,我们通过一个实例来进行演示。
假设我们要计算1011(二进制)减去1101(二进制):1.将被减数1011和减数1101转换为补码表示。
1011的补码为1011(本身为正数,补码为其本身)。
1101的补码为10101(原数为负数,取反后加1)。
2.将两个补码数进行按位相加:1011(被减数)10101(减数)--------------------1000003.最后得到的补码数100000即为二进制减法1011减去1101的结果。
通过以上步骤,我们成功地将二进制减法转化为补码加法运算,并得到了正确的结果。
总结与展望:二进制减法运算法则补码在处理二进制数据时具有重要的作用。
掌握补码的原理和方法,能够帮助我们更加高效地处理和运算二进制数据。
7位补码范围7位补码是指使用7个二进制位进行表示的补码。
对于有符号数而言,最高位表示符号位,0表示正数,1表示负数。
接下来的6个位表示数值的绝对值。
7位补码可以表示的数值范围如下:-对于正数而言,最高位为0,剩下6位可表示的最大数值为0111111(+63),最小数值为0000000(+0)。
-对于负数而言,最高位为1,剩下6位可表示的最大数值为0111111(-1),最小数值为1000000(-64)。
因此,7位补码总共可以表示的数值范围是从-64到+63。
在计算机中,7位补码主要用于存储和处理较小的整数。
以下将详细介绍关于7位补码的相关内容。
首先,我们需要了解补码的概念。
在计算机中,存储和处理负数需要进行符号位的处理,而补码正是为了解决这一问题而提出的一种表示方法。
补码表示方法主要有三种:原码、反码和补码。
其中,原码直接使用二进制表示数字的绝对值,最高位表示符号;反码在原码基础上,对于负数按位取反;而补码在反码的基础上,再加上1。
补码的优点是能够将正负数进行相同的运算,简化了计算机的运算逻辑。
对于7位补码来说,最大的整数是+63,对应的二进制表示为0111111。
如下所示:+63的7位补码表示:0111111最小的整数是-64,对应的二进制表示为1000000。
如下所示:-64的7位补码表示:1000000可以看出,7位补码的范围是从-64到+63,共计128个整数。
接下来,我们可以通过具体的例子来理解7位补码的运算规则。
首先,我们来看一些正数的补码表示。
假设有一个3位的补码表示,我们可以表示的正数范围是0到7。
如下所示:0的3位补码表示:000 (原码、反码和补码都相同)1的3位补码表示:0012的3位补码表示:0103的3位补码表示:0114的3位补码表示:1005的3位补码表示:1016的3位补码表示:1107的3位补码表示:111上述示例中,对于正数而言,补码的原码、反码和补码都相同,因此不需要进行转换。
1.第一篇
数值在计算机中表示形式为机器数,计算机只能识别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等其他高级语言中使用的都是原码。
看了上面这些大家应该对原码、反码、补码有了新的认识了吧!
2.第二篇
假设字长为8bits 要完成,1-1 =0
( 1 ) - ( 1 )
( 1 ) + ( -1 )
(00000001)+ (10000001) -----------------原码计算
= (10000010)= ( -2 )
( 1 ) - ( 2 )
( 1 ) + ( -2 )
(00000001)+ (10000010) -----------------原码计算
= (10000011)= ( -3 )
显然结果不正确.
II.因为在两个整数的加法运算中是没有问题的,于是就发现问题出现在带符号位的负数身上,对除符号位外的其余各位逐位取反就产生了反码.反码的取值空间和原码相同且一一对应.
下面是反码的减法运算:
(00000001)+ (11111110)----反码计算
= (11111111)
= ( 10000000 )
=(-0)有问题
按上面同样的方法计算1-2=-1
(00000001)+ (11111101)----反码计算
= (11111110)
= ( 10000001 ) = (-1)正确
问题出现在(+0)和(-0)上,在人们的计算概念中零是没有正负之分的.(印度人首先将零作为标记并放入运算之中,包含有零号的印度数学和十进制计数对人类文明的贡献极大). 于是就引入了补码概念.
编辑本段负数的补码
负数的补码就是对反码加一,而正数不变,正数的原码反码补码是一样的.
在补码中用(-128)代替了(-0),所以补码的表示范围为: (-128~0~127)共256个.
注意:(-128)也有相对应的原码和反码, 它的反码是(11111111)原码仍然是(10000000)(-128)
补码的加减运算如下:
下面是补码的运算:
( 1 )- ( 1 )= ( 1 )+ ( -1 )
=(00000001)补+ (11111111)补(反码加一)
= (00000000)补= ( 0 )正确
( 1 )- ( 2)= ( 1 )+ ( -2 )
= (00000001)补+ (11111110)补
= (11111111)补= ( -1 ) 正确
(-1) = (10000001)原码=(11111110 )反码 =((11111110 )+ 1)补码
编辑本段设计目的
所以补码的设计目的是:
⑴使符号位能与有效值部分一起参加运算,从而简化运算规则.
⑵使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计所有这些转换都是在计算机的最底层进行的,而在我们使用的汇编、C 等其他高级语言中使用的都是原码。
小数和分数的补码
一、十进制分数补码可以先将分子和分母分别表示成二进制数,然后
计算出二进制小数,再按下面第三步的方法将求出小数的补码形式。
37/64=100101B/2^6=0.100101B
-51/128=110011B/2^7=0.0110011B
二、十进制小数的补码也应该先将其转换成二进制小数,再按下面第
三步的方法将求出小数的补码形式。
0.375=0.011B
0.5625=0.1001B
三、将二进制小数对应的补码求出
[37/64]补码=[0.100101B]补码=00100101B
[-51/128]补码=[0.0110011B]补码=11001101B
[0.375]补码=[0.011B]补码=00110000B
[0.5625]补码=[0.1001B]补码=01001000B
例如
[-3]反
[-3]补
[a-b]补
所以n 比n
又例:1011 原码:反码:补码:-1011 原码:反码:补码:0.
原码:反码:补码:-0.
原码:反码:补码:
总结:
1
(1)
例如:
[+7]原
[-7]原
2
例如:
注意:
3
1
点钟(2
点(
8 2
例如:
[+7]补
a.
b.
c.。