计算机中数值的三种表示方法详解:原码,反码,补码

合集下载

计算机基础--原码、反码、补码

计算机基础--原码、反码、补码

计算机基础--原码、反码、补码声明:以下⼆进制数据都是指⼋⽐特位长度的⼆进制数;以下⼗进制数都是指的整数。

1、什么是原码?我们来看⼀下百度百科的定义:原码(true form)是⼀种计算机中对数字的⼆进制定点表⽰⽅法;原码表⽰法在数值前⾯增加了⼀位符号位(即最⾼位为符号位):正数该位为0,负数该位为1,其余位表⽰数值的⼤⼩。

举个例⼦:100的源码怎么表⽰?--答案是:0 110 0100-100的源码怎么表⽰?--答案是:1 110 0100此外,还要注意⼀点:百度百科中看到⼀句话:原码不能直接参加运算,可能会出错。

他举出⼀个例⼦:在数学中 1+(-1)=0;但是⽤⼆进制进⾏计算的时候就会变成:0000 0001+1000 0001=1000 0010,换算成⼗进制是 -2。

显然结果是错误的。

2、什么是反码?反码通常是⽤来由原码求补码、或者由补码求原码的过渡码。

那么同⼀个数的反码与原码的对应关系是什么呢?反码跟原码是正数时,⼀样;负数时,反码就是原码符号位除外,其他位按位取反。

举个例⼦:100的原码是?0 110 0100100的反码是?0 110 0100========-100的原码是?1 110 0100-100的反码是?1 001 1011从上⾯的例⼦来看I、想知道⼀个⼗进制数的⼆进制反码表⽰形式,得先知道这个⼗进制数的原码。

也就是说,原码虽然简单,但却⾮常重要。

II、原码、反码都是数值在计算机中的表⽰⽅法,他们俩⾸位都表⽰符号位,即1为负、0为正;其余的为数值位。

原码的数值位的值就是所表⽰数的真值。

反码的数值位的意义我们不去深究。

3、什么是补码?在了解什么是原码的时候,我们就发现了原码在⼆进制加减运算中存在问题。

所以,计算机系统,数值⼀律采⽤补码来表⽰和存储。

原因是,补码能够将符号位和数值位统⼀处理;同时,减法和加法也可以统⼀处理。

这个例⼦解释了以n值为模的系统⾥,减法问题如何转化成加法问题的--把减数⽤相应的补数表⽰就可以了。

原码、反码、补码

原码、反码、补码

原码、反码、补码⼀、什么是原码、反码、补码原码:将⼀个整数,转换成⼆进制,就是其原码。

如单字节的5的原码为:0000 0101;-5的原码为1000 0101。

反码:正数的反码就是其原码;负数的反码是将原码中,除符号位以外,每⼀位取反。

如单字节的5的反码为:0000 0101;-5的反码为1111 1010。

补码:正数的补码就是其原码;负数的反码+1就是补码。

如单字节的5的补码为:0000 0101;-5的补码为1111 1011。

⼆、为什么要有这三类码计算机只能识别0和1,使⽤的是⼆进制。

⽽在⽇常⽣活中⼈们使⽤的是⼗进制,并且我们⽤的数值有正负之分。

于是在计算机中就⽤⼀个数的最⾼位存放符号(0为正,1为负)。

这就是机器数的原码了。

有了数值的表⽰⽅法就可以对数进⾏算术运算,但是很快就发现⽤带符号位的原码进⾏乘除运算时结果正确,⽽在加减运算的时候就出现了问题,如下:假设字长为8bits(1) 10 - (1)10 = (1)10 + (-1)10 = (0)10(0 0000001)原 + (1 0000001)原 = (1 0000010)原 = ( -2 ) 显然不正确。

因为在两个整数的加法运算中是没有问题的,于是就发现问题出现在带符号位的负数⾝上。

对除符号位外的其余各位逐位取反就产⽣了反码。

反码的取值空间和原码相同且⼀⼀对应。

下⾯是反码的减法运算:(1)10 - (1)10 = (1)10 + (-1)10= (0)10(0 0000001)反 + (1 1111110)反 = (1 1111111)反 = ( -0 ) 有问题。

(1)10 - (2)10 = (1)10 + (-2)10 = (-1)10(0 0000001)反 + (1 1111101)反 = (11111110)反 = (-1) 正确。

问题出现在(+0)和(-0)上,在⼈们的计算概念中零是没有正负之分的。

(印度⼈⾸先将零作为标记并放⼊运算之中,包含有零号的印度数学和⼗进制计数对⼈类⽂明的贡献极⼤)。

原码、反码和补码的数值范围,溢出的判断方法

原码、反码和补码的数值范围,溢出的判断方法

原码、反码和补码的数值范围,溢出的判断方法原码、反码和补码是计算机中常用的三种表示数值的方式。

它们的数值范围、溢出的判断方法和优缺点如下:
1. 数值范围:
- 原码(的最低正整数位为1,最高正整数位为7):原码表示的整数范围从-32768到32767。

- 反码(的最高正整数位为1,最低正整数位为7):反码表示的整数范围从-128到127。

- 补码(的最高正整数位为1,最低正整数位为0):补码表示的整数范围从0到65535。

需要注意的是,在计算机中,原码、反码和补码都是对整数进行操作的,但它们之间还存在一些差异。

例如,在二进制表示中,一个数的最高位是1并不意味着它的值就是1,而是表示它是负数。

因此,在进行溢出判断时,需要考虑原码、反码和补码之间的这种差异。

2. 溢出的判断方法:
- 原码的溢出判断方法:当原码的的最低正整数位为1时,表示该数已经超出了原码的数值范围,因此需要进行溢出判断。

可以使用以下公式来判断:
$n < 0 lor (n + 7) > 32767$
- 反码的溢出判断方法:当反码的最高正整数位为1时,表示该数已经超出了反码的数值范围,因此需要进行溢出判断。

可以使用以下公式来判断:
$n < -128 lor (n + 7) > 127$
- 补码的溢出判断方法:当补码的最高正整数位为1时,表示该数已经超出
了补码的数值范围,因此需要进行溢出判断。

计算机机器数的三种表示方法

计算机机器数的三种表示方法

计算机机器数的三种表示方法计算机中的机器数可以通过不同的表示方法来表示。

下面将介绍计算机机器数的三种常见表示方法:原码、反码和补码。

1. 原码表示法:原码是机器数的最简单表示方法。

原码的表示方法是将一个数值的绝对值转换为二进制表示,然后在最高位上加上符号位,0代表正数,1代表负数。

例如,对于十进制数-5,它的原码表示为10000101,其中最高位1表示负数,其余位表示数值的绝对值。

原码表示法的优点是简单明了,符号位和数值部分可以直接进行运算,但是它也存在一些问题。

首先,原码的加法运算需要分别对符号位和数值部分进行处理,不够高效。

其次,原码中存在两个零:+0和-0,导致运算结果不唯一。

2. 反码表示法:为了解决原码运算不方便的问题,人们引入了反码表示法。

在反码表示法中,正数的反码与原码相同,负数的反码是对原码符号位之后的数值部分按位取反。

例如,对于十进制数-5,它的反码表示为11111010,其中最高位1表示负数,其余位是对原码数值部分按位取反得到的。

反码表示法解决了原码运算的问题,可以直接对符号位和数值部分进行运算,但是它仍然存在一个问题:+0和-0的表示仍然不唯一。

3. 补码表示法:为了解决反码表示法的+0和-0不唯一的问题,人们引入了补码表示法。

在补码表示法中,正数的补码与原码相同,负数的补码是对原码符号位之后的数值部分按位取反,然后再加1。

例如,对于十进制数-5,它的补码表示为11111011,其中最高位1表示负数,其余位是对原码数值部分按位取反得到的,然后再加1。

补码表示法是计算机中最常用的表示方法。

它解决了原码和反码表示法中+0和-0不唯一的问题,同时还能够简化负数的加法运算。

在补码表示法中,正数和负数的加法运算可以统一处理,只需要进行简单的二进制加法即可。

总结:计算机中的机器数可以通过不同的表示方法来表示,其中包括原码、反码和补码。

原码是最简单的表示方法,直接将数值的绝对值转换为二进制表示,并在最高位上加上符号位。

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

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

计算机中带符号数的表示之原码、补码、反码计算机中带符号数的表示之原码、补码、反码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%以上,因此,能否方便地进行正、负数加、减运算,直接关系到计算机的运行效率。

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

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

计算机中的原码、补码与反码⼀、原码: 所谓原码就是当前数字的⼆进制表现形式,int为例,第⼀位表⽰符号 (0正数 1负数)简单期间⼀个字节表⽰ +7的原码为: 00000111 -7的原码为: 10000111 对于原码来说,绝对值相等的正数和负数只有符号位不同。

⼆、反码: 正数的反码就是本⾝。

负数的反码是⼆进制保留符号位。

剩余位取反,⽐如-1的反码是1111 1110;三、补码: 正数的反码、补码、原码都是⼀样的,负数的补码是在其反码的基础上+1,⽐如-1的补码是1111 1111。

为什么要使⽤补码呢: 我们知道,0是不分正数还是负数的,也就是说,如果使⽤原码表⽰0的话,有两种表⽰⽅式,即00000000与10000000,这对计算来说很不⽅便。

如果我们使⽤补码来表⽰的话: 正数的0的表⽰: 因为正数的原码、反码、补码都是相同的。

所以正数0的反码与补码都是00000000; 负数的0的表⽰: 负数的0的原码是10000000,它的补码也就是在其反码的基础上+1,10000000的反码为符号位不变,剩余位取反,即为11111111,再加⼀的话为00000000,这样的话0的正数表⽰与负数表⽰都是00000000。

其实还有⼀个更重要的原因:就是利⽤⾼位溢出,将减法运算变成加法运算。

这样可以简化运算的设计:⽐如计算3-2,我们可以当做3+(-2)来运算:化为⼆进制: 3:0000 0011; -2:原码:1000 0010;反码:1111 1101;补码在反码基础上+1,即为:1111 1110这样3+(-2)的计算为:1000 0010 + 1111 1110 -------------------- ⾼位溢出结果为:0000 0001在计算机系统中,数值都是以补码来表⽰和存储的。

计算机计算过程是先转换成补码,再按位相加。

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

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

原码、反码与补码知识讲解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 。

原码、反码与补码的详细讲解

原码、反码与补码的详细讲解

一、概述大家都知道,一个十进制数在计算机中都是以二进制数的形式存储的。

十进制数是有正负之分的,那么如何在计算机中来表示正号和负号呢?我们通常使用二进制数的最高位来表示数的符号:“0”来表示正号,“1”来表示负号。

在计算机中整型数值数据的编码主要有:z原码z反码z补码在开始讲述这三种编码方法前,我们首先介绍一下机器数、真值、模数的概念。

1.机器数数(含符号)在机器中的编码表示。

2.真值机器数所对应的真实数值。

3.模数一个计量器的容量或与零等价的数。

z对于一个n位计数器,每1位有R种状态,每种状态代表1个数,从“0”开始计数。

z计数器所能计的数值的个数即模数。

z计数器的模数 = 计数器的最大值+1 。

z计数器的模数(R n)取决于基数(R)和位数(n)例子01 2位十进制计数器的模数是多少?解:R=10 n=2 模数=R n = 102 = 99(最大的2位十进制数)+1 = 100 例子02 8位二进制计数器的模数是多少?解:R=2 n=8 模数=R n = 28 = 255(最大的8位二进制数)+1 = 2564. 为什么使用编码来表示“数”?为了方便计算机的处理,简化计算过程。

二、原码1. 定义022011≤<−−<≤−−XX X n n 21−X n =原][X其中:n 为二进制的位数原码的表示范围: )12(~)12(11−−−−−n n 问题:当n=8时,原码的表示范围是多少?请用十进制数表示。

2. 求原码的方法求原码的方法概括起来有两种z 根据定义求原码z 直接写出原码(1) 根据定义求原码例子03已知:a = +2 ,b = -2 ,根据定义求a ,b 的原码[ a ]原和[ b ]原。

设n = 8 。

解:根据公式有 [ a ]原 = a = (0000 0010)2[ b ]原 = 2 n-1 – b= 28-1 – ( -2) = 27+21000 0000+ 101000 0010(2) 直接写出原码这种方法跟我们书上一样,不再赘述。

原码反码补码乘除规则

原码反码补码乘除规则

原码反码补码乘除规则原码、反码、补码是计算机中存储和运算的三种表示方式。

它们的存在是为了解决符号位(即最高位)的问题,即正负数的表示方式,遵循的是二进制的加减以及进位制度,用来解决操作溢出问题。

原码是二进制中最常见的表示方法,符号位为0表示正数,为1表示负数。

例如,8位二进制数00001001表示正数9,11111001表示负数-9。

反码也是二进制数表示方法中常用的一种方式。

一个数的反码的符号位与原码相同,而其余位取反。

例如,8位二进制数00001001的反码是00001001,11111001的反码是10000110。

补码是二进制数表示中最常用的一种方式,它是计算机中存储和处理数据的主要方式。

补码的符号位与原码和反码的符号位相同,其余位的求法是在反码的基础上加1。

例如,8位二进制数00001001的补码是00001001,11111001的补码是10001001。

乘法和除法是数学运算中的两个基本要素,同样在计算机中也具有重要的作用。

当计算机进行乘法和除法时,需要遵守一定的规则。

乘法规则:对于两个数相乘,如果两个数的符号相同,则结果为正数,反之为负数。

同时,对于乘数和被乘数的最高位,其符号位可以省略,因为它们的符号可以根据乘积的符号来推断。

除法规则:对于两个数相除,如果两个数的符号相同,则结果为正数,反之为负数。

当被除数和除数为0时,需要抛出异常,因为除数不能为0。

此外,在进行整数除法时,需要注意舍入的方式,应该向0舍入。

综上所述,原码、反码、补码是计算机中所使用的三种数值表示方法。

在进行乘法和除法时,应该遵守一定的规则。

这些知识对于理解计算机底层的运算过程以及提高计算机编程的能力具有重要的意义。

原码、补码和反码

原码、补码和反码

原码、补码和反码在计算机内,定点数有3种表示法:原码、反码和补码所谓原码就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。

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

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

1、原码、反码和补码的表示方法(1)原码:在数值前直接加一符号位的表示法。

例如:符号位数值位[+7]原= 0 0000111 B[ -7]原= 1 0000111 B注意:a. 数0的原码有两种形式:[+0]原=00000000B [-0]原=10000000Bb. 8位二进制原码的表示范围:-127~+127(2)反码:正数:正数的反码与原码相同。

负数:负数的反码,符号位为“1”,数值部分按位取反。

例如:符号位数值位[+7]反= 0 0000111 B[-7]反= 1 1111000 B注意:a. 数0的反码也有两种形式,即[+0]反=00000000B[- 0]反=11111111Bb. 8位二进制反码的表示范围:-127~+127(3)补码的表示方法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来代替,这就把减法问题转化成加法问题了(注:计算机的硬件结构中只有加法器,所以大部分的运算都必须最终转换为加法)。

原码、反码、补码、移码、阶码、BCD码、余3码

原码、反码、补码、移码、阶码、BCD码、余3码

原码、反码、补码、移码、阶码、BCD码、余3码原码:原码(true form)是一种计算机中对数字的二进制定点表示方法。

源码表示法在数值前面增加了一位符号位(即最高位为符号位),该位为0表示正数,该位为1表示负数。

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

补码:补码(two’s complement) 1、在计算机中,数值一律用补码表示(存储)。

主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法处理。

另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。

2、补码与原码的转换过程几乎是相同的。

==补码的概述==求给定数值的补码表示分以下两种情况:(1)正数的补码:与原码相同。

【例1】+9的补码是00001001。

(这个+9的补码说的是用8位的2进制来表示补码的,补码表示表示方式很多,还有16位2进制补码表示形式,以及32位2进制补码表示形式等。

)(2)负数的补码:符号位为1,其余位为该数绝对值的原码按位取反;然后加1。

同一数字在不同的补码表示形式里头是不同的。

【例2】求-7的补码。

因为给定数是负数,则符号位为“1”。

后七位:+7的原码(0000111)→按位取反(1111000)→加1(1111001),所以-7的补码为1111001。

已知一个数的补码,求原码的操作分两种情况:(1)如果补码的符号位为“0”,表示是一个正数,其原码就是补码。

(2)如果补码的符号位为“1”,表示是一个负数,那么求给定的这个补码的补码就是要求的原码。

另一种方法求负数的补码,如下:例如:求-15的补码第一步:+15:00001111第二步:逐位取反,然后在末位加1。

11110001【例3】已知一个补码11111001则原码是10000111(-7)。

(补码的补码)“模”的概念“模”是指一个计量系统的计数范围。

如时钟等。

计算机也可以看成一个计量机器,它也有一个计量范围,即都存在一个“模”。

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

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

原码,反码,补码,移码的概念以及各⾃的⽤途和优点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、数的定点与浮点表示在计算机内部,通常用两种方法来表示带小数点的数,即所谓的定点数和浮点数。

①定点数:是小数点在数中的位置是固定不变的数,数的最高位为符号位,小数点可在符号位之后,也可在数的末尾,小数点本身不需要表示出来,它是隐含的。

缺点:只有纯小数或整数才能用定点数表示;②浮点数:小数点在数中的位置是浮动的、不固定的数。

一般浮点数既有整数部分又有小数部分,通常对于任何一个二进行制数N,总可以表示成:N=±2P×SN、P、S均为二进制数,P为N的阶码,一般为定点整数,常用补码表示,阶码指明小数点在数据中的位置,它决定浮点的表示范围;S称为浮点数N的尾数,一般为定点小数,常用补码或原码表示,尾数部分给出了浮点数的有效数字位数,它决定了浮点数的精度,且规格化浮点数0.5≤|S|<1;在计算机中表示一个浮点数其结构为:假设用八个二进制位来表示一个浮点数,且阶码部分占4位,其中阶符占一位;尾数部分占4位,尾符也占一位。

若现有一个二进制数110一个浮点形式的尾数S0,则该浮点数称为规格化数;规格化数可以提高运算的精度。

S为原码表示,则S1=1规格化数S为补码表示N为正数,则S1 =1N为负数,则S1=0二、原码、反码和补码1、机器数与真值真值:用“+”、“—”号表示的二进制数。

机器数:在计算机中数据和符号全部数字化,最高位为符号位,且用0表示正、1表示负,那么把包括符号在内的一个二进制数我们称为机器数。

如:将真值+11101B表示成机器数为011101B,—11101B表示成机器数为111101B。

2、原码、反码和补码的概念1)概念机器数有原码、反码和补码三种表示方法。

原码:是最简单的机器数表示法。

什么是原码、反码、补码

什么是原码、反码、补码

[-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。 . 小数原码表示法 设有一数为,则原码表示可记作[]原(下标表示)。例如, + ; 原码表示数的范围与二进制位数有关。设二进制小数±…,则小数原码的定 义如下: 例如:时, 根据以上公式可得[]原;-时,根据以上公式可得[]原 ()

计算机中数值的三种表示方法详解:原码,反码, 补码

计算机中数值的三种表示方法详解:原码,反码, 补码

计算机中数值的三种表示方法详解原码,反码,补码最近在学习软件评测师的知识,其中涉及到计算机的原码, 反码和补码等知识. 通过网上查阅资料,进行了深入学习,分享给大家。

本文主要从以下几点进行介绍:如何计算原码,反码,补码?为何要使用反码和补码?希望本文对大家学习计算机基础有所帮助一. 机器数和真值在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念.1、机器数一个数在计算机中的二进制表示形式, 叫做这个数的机器数。

机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1.比如,十进制中的数+3 ,计算机字长为8位,转换成二进制就是00000011。

如果是-3 ,就是10000011 。

那么,这里的00000011 和10000011 就是机器数。

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

例如上面的有符号数10000011,其最高位1代表负,其真正数值是-3 而不是形式值131(10000011转换成十进制等于131)。

所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。

例:0000 0001的真值= +000 0001 = +1,1000 0001的真值= –000 0001 = –1二. 原码, 反码, 补码的基础概念和计算方法.计算机中的符号数有三种表示方法,即原码、反码和补码。

三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同。

1. 原码原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制:[+1]原 = 0000 0001[-1]原 = 1000 0001第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是: [1111 1111 , 0111 1111]即[-127 , 127]原码是人脑最容易理解和计算的表示方式.2. 反码反码的表示方法是:正数的反码是其本身负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.[+1] = [00000001]原 = [00000001]反[-1] = [10000001]原 = [11111110]反可见如果一个反码表示的是负数, 人脑无法直观的看出来它的数值. 通常要将其转换成原码再计算.3. 补码补码的表示方法是:正数的补码就是其本身负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)[+1] = [00000001]原 = [00000001]反 = [00000001]补[-1] = [10000001]原 = [11111110]反 = [11111111]补对于负数, 补码表示方式也是人脑无法直观看出其数值的. 通常也需要转换成原码在计算其数值.简单总结以下,反码和补码的表示方式以及计算方法.对于正数,三种编码方式的结果都相同:正整数的原码、反码、补码完全一样,即符号位固定为0,数值位相同。

计算机原理(原码、反码、补码)

计算机原理(原码、反码、补码)

计算机原理- 整数的补码,原码, 反码解释一:对于整数来讲其二进制表示没有符号位.一个字节的表示范围为00000000-11111111,由此可见一个字节的整数表示范围为[0,255=2^8 - 1]。

对于整数来讲,其二进制表示中存在一个符号位.先来看一下下面几个定义:1:在计算机中,负数以其正值的补码形式表达。

正数即在符号位补0.2:原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。

3:反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。

4:补码: 反码+1由以上可以得到.计算机储存有符号的整数时,是用该整数的补码进行储存的,0的原码、补码都是0;正数的原码、补码可以特殊理解为相同;负数的补码是它的反码加1。

范围: 正数 [00000000 - 01111111] 即[0, 2^7 - 1]。

负数 [10000000 - 11111111] 。

范围说明. 11111111 - 1 = 11111110,取反=00000001 即是-1. 10000000 -1 = 01111111,取反=10000000, 即是-128. 因此有一个有符号二进制表示范围是从[-128-127].解释二:大家都知道数据在计算机中都是按字节来储存了,1个字节等于8位(1Byte=8bit),而计算机只能识别0和1这两个数,所以根据排列,1个字节能代表256种不同的信息,即2^8(0和1两种可能,8位排列),比如定义一个字节大小的无符号整数(unsigned char),那么它能表示的是0~255(0~2^8 -1)这些数,一共是256个数,因为,前面说了,一个字节只能表示256种不同的信息。

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

真值原码反码补码详解和习题

真值原码反码补码详解和习题

原码、反码和补码的概念本节要求掌握原码、反码、补码的概念知识精讲数值型数据的表示按小数点的处理可分为定点数和浮点数;按符号位有原码、反码和补码三种形式的机器数。

一.计算机中数据的表示方法1、数的定点与浮点表示在计算机内部,通常用两种方法来表示带小数点的数,即所谓的定点数和浮点数。

①定点数:是小数点在数中的位置是固定不变的数,数的最高位为符号位,小数点可在符号位之后,也可在数的末尾,小数点本身不需要表示出来,它是隐含的。

缺点:只有纯小数或整数才能用定点数表示;②浮点数:小数点在数中的位置是浮动的、不固定的数。

一般浮点数既有整数部分又有小数部分,通常对于任何一个二进行制数N,总可以表示成:N=±2P×SN、P、S均为二进制数,P为N的阶码,一般为定点整数,常用补码表示,阶码指明小数点在数据中的位置,它决定浮点的表示范围S为N的尾数,一般为定点小数,常用补码或原码表示,尾数部分给出了浮点数的有效数字位数,它决定了浮点数的精度,且规格化浮点数0.5≤|S|<1;0.1B=( 1/2 )D =( 2-1)D0.11B=(1/2 + 1/4 )D =( 2-1+2-2)D0.111B=(1/2 + 1/4 + 1/8 )D =( 2-1+2-2+2-3)D ---------------------------在计算机中表示一个浮点数其结构为:假设用八个二进制位来表示一个浮点数,且阶码部分占4位,其中阶符占一位;尾数部分占4位,尾符也占一位。

若现有一个二进制数N=(101100)2可表示为:2110×0.1011,则该数在机器内的表示形式为:101100B= 10110B * (21)D101100B= 1011B * (22)D101100B= 101.1B * (23)D101100B= 10.11B * (24)D101100B= 1.011B * (25)D101100B= 0.1011B * (26110一个浮点形式的尾数S若满足0.5≤|S|<1,且尾数的最高位数为1,无无效的0,则该浮点数称为规格化数;规格化数可以提高运算的精度。

简述原码,反码,补码,移码以及浮点数的运算规则。

简述原码,反码,补码,移码以及浮点数的运算规则。

简述原码,反码,补码,移码以及浮点数的运算规则。

计算机中的数字表示方式有多种,包括原码、反码、补码、移码和浮点数。

下面将分别对这些数字表示方式进行简要的介绍。

首先是原码。

原码是最简单直观的一种表示方式,它是用最高位表示符号位(0表示正数,1表示负数),其余位表示数值部分。

但是原码表示方式存在一个严重的问题,就是0有两种表示形式,即+0和-0,这给计算机的运算带来了困难。

为了解决原码的问题,人们提出了反码的表示方式。

反码的符号位和数值部分的计算方式和原码相同,不同的地方在于负数的表示。

负数的反码是在其对应的正数原码上,符号位不变,其他位取反,即0变为1,1变为0。

这样负数只有一种表示形式,解决了原码表示方式的问题。

但是反码也存在一个问题,就是负数的加减法运算比较复杂,需要进行多次进位操作。

为了解决反码的问题,人们提出了补码的表示方式。

补码的符号位和数值部分的计算方式和原码、反码相同,不同的地方在于负数的表示。

负数的补码是在其对应的正数原码上,符号位不变,其他位取反,然后再加1。

补码表示方式的优点是负数的加减法运算变得非常方便,只需要进行一次加法即可得到结果。

因此,补码是计算机中最常用的表示方式。

除了原码、反码、补码,还有一种表示方式叫做移码。

在移码表示方式中,正数的移码和原码相同,而负数的移码是在其对应的原码(绝对值)上减1。

移码表示方式在计算机中并不常用,但是它有一些特殊的应用场景,比如浮点数的表示方式。

最后是浮点数的运算规则。

浮点数是一种用科学计数法表示的实数,由两部分组成:尾数和指数。

尾数表示实数的有效位数,指数表示实数的数量级。

浮点数的表示方式有多种,比如单精度浮点数、双精度浮点数等。

浮点数的运算规则和整数运算有一些不同,需要考虑尾数和指数的加减、乘除等运算规则。

总的来说,计算机中的数字表示方式有多种,每种表示方式都有其自身的优缺点和适用场景。

对于不同的应用需求,我们需要选择合适的表示方式来进行数字的表示和运算。

关于原码、反码和补码的介绍及转化关系

关于原码、反码和补码的介绍及转化关系

关于原码、反码和补码的介绍及转化关系计算机中的符号数有三种表⽰⽅法,即原码、反码和补码。

三种表⽰⽅法均有符号位和数值位两部分,是计算机中对数字的⼆进制定点表⽰⽅法。

符号位都是⽤0表⽰“正”,⽤1表⽰“负”,⽽数值位,三种表⽰⽅法各不相同。

下⾯依次介绍并给出相互的转换关系:原码:简单直观;例如,我们⽤8位⼆进制表⽰⼀个数,+11的原码为00001011,-11的原码就是10001011。

但参加运算可能出错。

例如数学上,1+(-1)=0,⽽在⼆进制中,00000001+10000001=10000010,换算成⼗进制为-2,显然出错了。

反码:反码通常是⽤来由原码求补码或者由补码求原码的过渡码。

反码跟原码是正数时,⼀样;负数时,反码就是原码符号位除外,其他位按位取反。

补码:在计算机系统中,数值⼀律⽤补码来表⽰和存储。

原因在于,使⽤补码,可以将符号位和数值域统⼀处理;同时,加法和减法也可以统⼀处理。

此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。

1、⼀个负整数(或原码)与其补数(或补码)相加,和为模。

2、对⼀个整数的补码再求补码,等于该整数⾃⾝。

3、补码的正零与负零表⽰⽅法相同。

总之,正整数的补码是其⼆进制表⽰,与原码相同。

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

即正整数的原码反码补码⼀样;负整数的反码是除了原码符号位其他位全部取反,补码是反码加⼀。

转换:由于正数的原码、补码、反码表⽰⽅法均相同,不需转换,所以仅以负数情况分析。

(1)已知原码,求补码。

例:已知某数X的原码为10110100,试求X的补码和反码。

解:由[X]原=10110100知,X为负数。

求其反码时,符号位不变,数值部分按位求反;求其补码时,再在其反码的末位加1。

1 0 1 1 0 1 0 0 原码1 1 0 0 1 0 1 1 反码(符号位不变,数值位取反)1 1 0 0 1 1 00 补码(补码再加⼀)故:X的补码=11001100,X的反码=11001101。

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

计算机中数值的三种表示方法详解原码,反码,补码最近在学习软件评测师的知识,其中涉及到计算机的原码,反码和补码等知识.通过网上查阅资料,进行了深入学习,分享给大家。

本文主要从以下几点进行介绍:如何计算原码,反码,补码?为何要使用反码和补码?希望本文对大家学习计算机基础有所帮助.机器数和真值在学习原码,反码和补码之前,需要先了解机器数和真值的概念.1、机器数一个数在计算机中的二进制表示形式,叫做这个数的机器数。

机器数是带符号的, 在计算机用一个数的最高位存放符号,正数为0,负数为1.比如,十进制中的数+3,计算机字长为8位,转换成二进制就是00000011。

如果是-3,就是10000011 那么,这里的00000011 和10000011 就是机器数。

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

例如上面的有符号数10000011,其最高位1代表负,其真正数值是-3而不是形式值131(10000011转换成十进制等于131 )。

所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。

例:0000 0001 的真值=+000 0001 = +1 , 1000 0001 的真值=-000 0001.原码,反码,补码的基础概念和计算方法计算机中的符号数有三种表示方法,即原码、反码和补码。

三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同。

1.原码原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值.比如如果是8位二进制:[+1]原=0000 0001 [-1]原=1000 0001第一位是符号位.因为第一位是符号位,所以8位二进制数的取值范围就是:[1111 1111 , 0111 1111][-127,127]原码是人脑最容易理解和计算的表示方式2.反码反码的表示方法是:正数的反码是其本身负数的反码是在其原码的基础上,符号位不变,其余各个位取反.[+1] = [00000001] 原=[00000001]反[-1] = [10000001] 原=[11111110]反可见如果一个反码表示的是负数,人脑无法直观的看出来它的数值.通常要将其转换成原码再计算.3.补码补码的表示方法是:正数的补码就是其本身负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+1.(即在反码的基础上+1)[+1] = [00000001] 原=[00000001]反=[00000001]补[-1] = [10000001] 原=[11111110]反=[11111111]补对于负数,补码表示方式也是人脑无法直观看出其数值的.通常也需要转换成原码在计算其数值.简单总结以下,反码和补码的表示方式以及计算方法对于正数,三种编码方式的结果都相同正整数的原码、反码、补码完全一样,即符号位固定为0,数值位相同。

[+1] = [00000001] 原=[00000001]反=[00000001]补对于负数,三种编码方式则完全不同:负整数的符号位固定为1,由原码变为补码时,规则如下:原=[11111110]反=[11111111]补可见原码,反码和补码是完全不同的.三.为何要使用原码,反码和补码既然原码才是被人脑直接识别并用于计算表示方式,为何还会有反码和补 码呢?在计算机系统中,数值一律用补码来表示和存储。

原因在于,使用补码,可 以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。

此外,补码 与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。

下面以一些例 子进行详细介绍。

人脑可以知道第一位是符号位,在计算的时候我们会根据符号位,选择对真值区 域的加减.(真值的概念在本文最开头).但是对于计算机,加减乘数已经是最基 础的运算,要设计的尽量简单.计算机辨别"符号位"显然会让计算机的基础电路 设计变得十分复杂!于是人们想出了将符号位也参与运算的方法.我们知道,根 据运算法则减去一个正数等于加上一个负数,即:1-1 = 1 + (-1) = 0 , 所以机器 可以只有加法而没有减法,这样计算机运算的设计就更简单了 .于是人们开始探索 将符号位参与运算,并且只保留加法的方法.首先来看原码:1、原码符号位1 不变,整数的每一位二进制数位求反,得到反码2、反码符号位1 不变,反码数值位最低位加1,得到补码[-1] = [10000001]计算十进制的表达式:1-1=01 - 1 = 1 + (-1) = [00000001] 原+ [10000001]原=[10000010]原=-2如果用原码表示,让符号位也参与计算,显然对于减法来说,结果是不正确的.这也就是为何计算机内部不使用原码表示一个数为了解决原码做减法的问题,出现了反码: 计算十进制的表达式:1-1=01 - 1 = 1 + (-1) = [0000 0001] 原+ [1000 0001]原=[0000 0001]反+ [1111 1110]反=[1111 1111]反=[1000 0000]原=-0发现用反码计算减法,结果的真值部分是正确的.而唯一的问题其实就出现在"0"这个特殊的数值上.虽然人们理解上+0和-0是一样的,但是0带符号是没有任何意义的.而且会有[0000 0000]原和[1000 0000]原两个编码表示0.于是补码的出现,解决了0的符号以及两个编码的问题:1-1 = 1 + (-1) = [0000 0001] 原+ [1000 0001]原=[0000 0001]补+ [1111 1111]补=[0000 0000]补=[0000 0000]原这样0用[0000 0000]表示,而以前出现问题的-0则不存在了.而且可以用[1000 0000]表示-128:(-1) + (-127) = [1000 0001] 原+ [1111 1111]原=[1111 1111]补+ [1000 0001]补=[1000 0000]补-1-127的结果应该是-128,在用补码运算的结果中,[1000 0000]补就是-128.但是注意因为实际上是使用以前的-0的补码来表示-128,所以-128并没有原码和反码表示.(对-128的补码表示[1000 0000]补算出来的原码是[0000 0000]原,这是不正确的) 使用补码,不仅仅修复了0的符号以及存在两个编码的问题,而且还能够多表示一个最低数.这就是为什么8位二进制,使用原码或反码表示的范围为[-127,+127],而使用补码表示的范围为[-128, 127].因为机器使用补码,所以对于编程中常用到的32位int类型,可以表示范围是:[-2 31,231-1]因为第一位表示的是符号位.而使用补码表示时又可以多保存一个最小值.四原码,反码,补码原理:模的概念计算机巧妙地把符号位参与运算,并且将减法变成了加法,背后蕴含了怎样的数学原理呢?模的概念可以帮助理解补数和补码。

“模”是指一个计量系统的计数范围。

如时钟等。

计算机也可以看成一个计量机器,它也有一个计量范围,即都存在一个“模”。

例如:时钟的计量范围是0〜11,模=12。

表示n位的计算机计量范围是0〜2八(n)-1,模=2八(n)。

“模”实质上是计量器产生“溢出”的量,它的值在计量器上表示不出来,计量器上只能表示出模的余数。

任何有模的计量器,均可化减法为加法运算。

假设当前时针指向6点,而准确时间是4点,我希望将时间设置成4点,需要怎么做呢?调整时间可有以下两种拨法:一种是倒拨2小时,即:6-4=2 ;另一种是顺拨10小时:6+10=12+4=41.往回拨2个小时:6 - 2 = 42.往前拨10个小时:(6 + 10) mod 12 = 43.往前拨10+12=22 个小时:(6+22) mod 12 =4 2,3方法中的mod是指取模操作,16 mod 12 =4 即用16除以12后的余数是4.所以钟表往回拨(减法)的结果可以用往前拨(加法)替代!现在的焦点就落在了如何用一个正数,来替代一个负数.上面的例子我们能感觉出来一些端倪,发现一些规律.但是数学是严谨的.不能靠感觉.首先介绍一个数学中相关的概念:同余——两个整数a, b,若它们除以整数m所得的余数相等,则称a,b对于模m同余记作a = b (mod m)读作a与b关于模m 同余。

举例说明:4 mod 12 = 416 mod 12 = 428 mod 12 = 4所以4, 16, 28关于模12同余.负数取模正数进行mod运算是很简单的.但是负数呢?F面是关于mod运算的数学定义:X ni o d Y 工£ —y [x/y] , lor V / 0.上面是截图,"取下界"符号找不到如何输入(word中粘贴过来后乱码).下面是使用"L"和J"替换上图的"取下界"符号:x mod y = x - y L x / y J上面公式的意思是:x mod y等于x减去y乘上x与y的商的下界.以-3 mod 2 举例:-3 mod 2=-3 - 2xL -3/2 J=-3 - 2x L- 1.5J=-3 - 2x(-2)=-3 + 4 = 1所以:(-2) mod 12 = 12-2=10(-4) mod 12 = 12-4 = 8(-5) mod 12 = 12 - 5 = 7再回到时钟的问题上:回拨2小时=前拨10小时回拨4小时=前拨8小时回拨5小时=前拨7小时注意,这里发现的规律!结合上面学到的同余的概念.实际上:(-2) mod 12 = 1010 mod 12 = 10 -2与10是同余的.(-4) mod 12 = 88 mod 12 = 8 -4与8是同余的.距离成功越来越近了.要实现用正数替代负数,只需要运用同余数的两个定理:反身性:a = a (mod m)这个定理是很显而易见的.线性运算定理:女口果a = b (mod m) , c = d (mod m) 那么:(1)a 土c = b 土 d (mod m)(2)a * c = b * d (mod m)所以:7 三7 (mod 12)(-2)三10 (mod 12)7 -2 三7 + 10 (mod 12)现在我们为一个负数,找到了它的正数同余数.但是并不是7-2 = 7+10, 而是7 -2三7 + 10 (mod 12), 即计算结果的余数相等.接下来回到二进制的问题上,看一下:2-1=1的问题.2-1=2+(-1) = [0000 0010]原+ [1000 0001]原=[0000 0010]反+ [11111110]先到这一步,-1的反码表示是1111 1110.如果这里将[1111 1110]认为是原码, 则[1111 1110]原=-126,这里将符号位除去,即认为是126.发现有如下规律:(-1) mod 127 = 126126 mod 127 = 126 (-1) mod 128 = 126(-1)三126 (mod 127)2-1 三2+126 (mod 127) 2-1与2+126的余数结果是相同的!而这个余数,正式我们的期望的计算结果: 2-1=1所以说一个数的反码,实际上是这个数对于一个膜的同余数.而这个膜并不是我们的二进制,而是所能表示的最大值!这就和钟表一样,转了一圈后总能找到在可表示范围内的一个正确的数值!而2+126很显然相当于钟表转过了一轮,而因为符号位是参与计算的,正好和溢出的最高位形成正确的运算结果.既然反码可以将减法变成加法,那么现在计算机使用的补码呢?为什么在反码的基础上加1,还能得到正确的结果?2-1=2+(-1) = [0000 0010] 原+ [1000 0001]原=[0000 0010]补+ [1111 1111] 如果把[1111 1111]当成原码,去除符号位,则:[0111 1111]原=127其实,在反码的基础上+1,只是相当于增加了膜的值:127 mod 128 = 1272-1 三2+127 (mod 128)(-1) mod 129 = 126此时,表盘相当于每128个刻度转一轮.所以用补码表示的运算结果最小值和最大值应该是[-128, 128].但是由于0的特殊情况,没有办法表示128,所以补码的取值范围是[-128, 127]。

相关文档
最新文档