二进制数的补码运算(经典)

二进制数的补码运算(经典)

二进制数的补码运算

二进制数的补码运算法则:

加法法则:0+0=0;0+1=1;1+0=1;1+1=10;减法法则:0-0=0;0-1=11;1-0=1;1-1=0;

加法运算:

11010+10111=110001

1+1=10,本位记0,向高位进1.

减法运算:

11000-10001=111

被减数不够减,向高位借1。1当2,2-1=1。

二进制的运算法则.

1.2 微型计算机运算基础 1.2.1 二进制数的运算方法 电子计算机具有强大的运算能力,它可以进行两种运算:算术运算和逻辑运算。1.二进制数的算术运算 二进制数的算术运算包括:加、减、乘、除四则运算,下面分别予以介绍。(1)二进制数的加法 根据“逢二进一”规则,二进制数加法的法则为: 0+0=0 0+1=1+0=1 1+1=0 (进位为1) 1+1+1=1 (进位为1)

例如:1110和1011相加过程如下: (2)二进制数的减法 根据“借一有二”的规则,二进制数减法的法则为: 0-0=0 1-1=0 1-0=1 0-1=1 (借位为1) 例如:1101减去1011的过程如下: (3)二进制数的乘法 二进制数乘法过程可仿照十进制数乘法进行。但由于二进制数只有0或1两种可能的乘数位,导致二进制乘法更为简单。二进制数乘法的法则为: 0×0=0 0×1=1×0=0 1×1=1

例如:1001和1010相乘的过程如下: 由低位到高位,用乘数的每一位去乘被乘数,若乘数的某一位为1,则该次部分积为被乘数;若乘数的某一位为0,则该次部分积为0。某次部分积的最低位必须和本位乘数对齐,所有部分积相加的结果则为相乘得到的乘积。 (4)二进制数的除法 二进制数除法与十进制数除法很类似。可先从被除数的最高位开始,将被除数(或中间余数)与除数相比较,若被除数(或中间余数)大于除数,则用被除数(或中间余数)减去除数,商为1,并得相减之后的中间余数,否则商为0。再将被除数的下一位移下补充到中间余数的末位,重复以上过程,就可得到所要求的各位商数和最终的余数。 例如:100110÷110的过程如下:

补码的绝对值 补码的运算

(3).补码的绝对值(称为真值) 【例4】-65的补码是10111111 若直接将10111111转换成十进制,发现结果并不是-65,而是191。事实上,在计算机内,如果是一个二进制数,其最左边的位是1,则 我们可以判定它为负数,并且是用补码表示。若要得到一个负二进制数的绝对值(称为真值),只要各位(包括符号位)取反,再加1,就得到真值。如:二进制值:10111111(-65的补码)各位取反:01000000 加1:01000001(+65的补码) 编辑本段代数加减运算 1、补码加法 [X+Y]补 = [X]补 + [Y]补【例5】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。【例6】1+(-1) [十进制] 1的原码00000001 转换成补码:00000001 -1的原码10000001 转换成补码:11111111 1+(-1)=0 00000001+11111111=00000000 00000000转换成十进制为0 0=0所以运算正确。 3、补码乘法 设被乘数【X】补=X0.X1X2……Xn-1,乘数【Y】补=Y0.Y1Y2……Yn-1, 【X*Y】补=【X】补×【Y】补,即乘数(被乘数)相乘的补码等于补码的相乘。 编辑本段补码的代数解释 任何一个数都可以表示为-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在

补码运算加减乘除原理

首先我们来看为什么要使用补码运算法: 因为人脑可以知道第一位是符号位, 在计算的时候我们会根据符号位, 选择对真值区域的加减. (真值的概念在本文最开头). 但是对于计算机, 加减乘数已经是最基础的运算, 要设计的尽量简单. 计算机辨别"符号位"显然会让计算机的基础电路设计变得十分复杂! 于是人们想出了将符号位也参与运算的方法. 我们知道, 根据运算法则减去一个正数等于加上一个负数, 即: 1-1 = 1 + (-1) = 0 , 所以机器可以只有加法而没有减法, 这样计算机运算的设计就更简单了. 于是人们开始探索将符号位参与运算, 并且只保留加法的方法. 首先来看原码: 计算十进制的表达式: 1-1=0 1 - 1 = 1 + (-1) = [00000001]原 + [10000001]原 = [10000010]原 = -2 如果用原码表示, 让符号位也参与计算, 显然对于减法来说, 结果是不正确的.这也就是为何计算机内部不使用原码表示一个数. 为了解决原码做减法的问题, 出现了反码: 计算十进制的表达式: 1-1=0 1 - 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: 接下来我们来看补码运算原理: 在计算机里,如果我们要计算5-3的值,我们既可以用5减去3,也可以用5 加上13。这是为什么呢? 这就像我们的钟表,它从1点走到12点之后,又回到了1点。我们的计算机 也是,从0走到15之后,再往下走就又回到了0,就像我们转了一个圈一样。 我们从5这个位置往回退3个格,就完成了5-3这个计算。我们也可以从5这 个位置往前走,一直走到15,这时我们走了10个格,然后我们继续往前走, 走到0,然后到1,然后就走到了2。这样,我们往前走了13个格之后,也到 了2这个位置。 所以说,在我们这个计算机中,减3和加13是一样的。而3+13=16,我们说在 模16的系统下,3和13是互补的。 这样,我们计算5-3就可以换成5+13。3的二进制表示为0011,5的二进制表 示为0101。这样,0101-0011就可以表示为0101+(-0011)。 我们在计算机中都是把负数用其补码表示,-0011的补码就是10000-0011(即 16-3,也就是13)。10000-0011=1+1111-0011=1+(1111-0011)=1+1100=1101。

原码-反码-补码及运算

原码,反码,补码及运算 一、定义 1.原码 正数的符号位为0,负数的符号位为1,其它位按照一般的方法来表示数的绝对值。用这样的表示方法得到的就是数的原码。 【例2.13】当机器字长为8位二进制数时: X=+1011011 [X]原码=01011011 Y=-1011011 [Y]原码=11011011 [+1]原码=00000001 [-1]原码=10000001 [+127]原码=01111111 [-127]原码=11111111 原码表示的整数范围是: -(2n-1-1)~+(2n-1-1),其中n为机器字长。 则:8位二进制原码表示的整数范围是-127~+127 16位二进制原码表示的整数范围是-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为机器字长。 则:8位二进制补码表示的整数范围是-128~+127(-128 表示为10000000,无对应的原码和反码) 16位二进制补码表示的整数范围是-32768~+32767 当运算结果超出这个范围时,就不能正确表示数了,此时称为溢出。 所以补码的设计目的是: ⑴使符号位能与有效值部分一起参加运算,从而简化运算规则. ⑵使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计

二进制 补码 运算

负数在计算机中如何表示? 举例来说,+8在计算机中表示为二进制的1000,那么-8怎么表示呢?很容易想到,可以将一个二进制位(bit)专门规定为符号位,它等于0时就表示正数,等于1时就表示负数。比如,在8位机中,规定每个字节的最高位为符号位。那么,+8就是00001000,而-8则是10001000。但是,随便找一本《计算机原理》,都会告诉你,实际上,计算机内部采用补码(Two's Complement)表示负数。 什么是补码? 它是一种数值的转换方法,要分二步完成: 第一步,每一个二进制位都取相反值,0变成1,1变成0。比如,00001000的相反值就是11110111。 第二步,将上一步得到的值加1。11110111就变成11111000。 所以,00001000的补码就是11111000。也就是说,-8在计算机(8位机)中就是用11111000表示。 不知道你怎么看,反正我觉得很奇怪,为什么要采用这么麻烦的方式表示负数,更直觉的方式难道不好吗? 昨天,我在一本书里又看到了这个问题,然后就花了一点时间到网上找资料,现在总算彻底搞明白了。

补码的好处 首先,要明确一点。计算机内部用什么方式表示负数,其实是无所谓的。只要能够保持一一对应的关系,就可以用任意方式表示负数。所以,既然可以任意选择,那么理应选择一种最方便的方式。 补码就是最方便的方式。它的便利体现在,所有的加法运算可以使用同一种电路完成。 还是以-8作为例子。 假定有两种表示方法。一种是直觉表示法,即10001000;另一种是补码表示法,即11111000。请问哪一种表示法在加法运算中更方便?随便写一个计算式,16 + (-8) = ? 16的二进制表示是00010000,所以用直觉表示法,加法就要写成:00010000 +10001000 --------- 10011000 可以看到,如果按照正常的加法规则,就会得到10011000的结果,转成十进制就是-24。显然,这是错误的答案。也就是说,在这种情况下,正常的加法规则不适用于正数与负数的加法,因此必须制定两套运算规

二进制-原码-补码-反码

1月16日 补课:原码、补码和反码 数在计算机中是以二进制形式表示的。 数分为有符号数和无符号数。 原码、反码、补码都是有符号定点数的表示方法。 一个有符号定点数的最高位为符号位,0是正,1是副。 以下都以8位整数为例, 原码就是这个数本身的二进制形式。 例如 0000001 就是+1 1000001 就是-1 正数的反码和补码都是和原码相同。 负数的反码是将其原码除符号位之外的各位求反 [-3]反=[10000011]反=11111100 负数的补码是将其原码除符号位之外的各位求反之后在末位再加1。 [-3]补=[10000011]补=11111101 一个数和它的补码是可逆的。 为什么要设立补码呢? 第一是为了能让计算机执行减法: [a-b]补=a补+(-b)补 第二个原因是为了统一正0和负0 正零:00000000 负零:10000000 这两个数其实都是0,但他们的原码却有不同的表示。 但是他们的补码是一样的,都是00000000 特别注意,如果+1之后有进位的,要一直往前进位,包括符号位!(这和反码是不同的!) [10000000]补 =[10000000]反+1 =11111111+1 =(1)00000000 =00000000(最高位溢出了,符号位变成了0) 有人会问 10000000这个补码表示的哪个数的补码呢?

其实这是一个规定,这个数表示的是-128 所以n位补码能表示的范围是 -2^(n-1)到2^(n-1)-1 比n位原码能表示的数多一个 又例: 1011 原码:01011 反码:01011 //正数时,反码=原码 补码:01011 //正数时,补码=原码 -1011 原码:11011 反码:10100 //负数时,反码为原码取反 补码:10101 //负数时,补码为原码取反+1 0.1101 原码:0.1101 反码:0.1101 //正数时,反码=原码 补码:0.1101 //正数时,补码=原码 -0.1101 原码:1.1101 反码:1.0010 //负数时,反码为原码取反 补码:1.0011 //负数时,补码为原码取反+1 总结: 在计算机内,定点数有3种表示法:原码、反码和补码 所谓原码就是前面所介绍的二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。 反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。 补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。 1、原码、反码和补码的表示方法 (1) 原码:在数值前直接加一符号位的表示法。 例如: 符号位 数值位 [+7]原= 0 0000111 B

二进制数的原码、反码及补码表示

二进制数的原码、反码及补码表示1、机器数与真值 机器数:数在机器中的编码表示。 真值:一般书写表示的数。 机器数中,数值和符号完全数字化。计算机在进行数字运算时,采用把各种符号位和数字位一起编码的方法。常见的有原码、反码及补码表示法。 2、原码表示法 原码表示法是机器数的一种简单表示法。其符号位用0表示正数,用1表示负数,数值一般用二进制形式表示。 [x]原=符号位+绝对值 若x=+1100110 则[x]原=01100110 x= -1100110 [x]原=11100110 所以用8位二进制数来表示整数原码时,其表示范围:最大数:01111111,为(+127)D 最小数:11111111,为(-127)D 思考:0的原码有两种表示形式!! 3、反码表示法 机器数的反码可由原码得到。如果机器数是正数,则机器数的反码与原码一致;若机器数是负数,则机器数的反码是它的原码(符号位除外)的各位取反而

得到。即: 正数:[x]反=[x]原 负数:[x]反=对[x]原除符号外的各位取反 若x=+1100110 则[x]反=01100110 x= -1100110 [x]反=10011001 4、补码表示法 机器数的补码也可由原码得到。如果机器数是正数,则机器数的反码与原码一致;若机器数是负数,则机器数的反码是它的原码(符号位除外)的各位取反,并在末位加1而得到。即:反码是作为求补码的中间过程。 正数:[x]补=[x]原 负数:[x]补=[x]反+1 若x=+1100110 则[x]补=01100110 x= -1100110 [x]补=10011010 注意:补码的0只有一种表示形式! [+0]原=00000000 [-0]原=10000000 [+0]反=00000000 [-0]反=11111111 [+0]补=[-0]补=00000000 所以用8位二进制数来表示整数补码时,其表示范围:最大数:01111111,为(+127)D 最小数:10000000,为(-128)D

二进制补码运算

课题三二进制补码运算 下面我们主要介绍在原码与补码运算中应注意的问题。 在原码运算时,首先要把符号与数值分开。例如两数相加,先要判断两数的符号,如果同号,可以做加法,如果异号,实际要做减法,减后的差作为两数之和,和数的符号与绝对值较大的数的符号相同。两数相减也是一样,首先要判断两数符号,然后决定是相加还是相减,还要根据两数的大小与符号决定两数之差的符号。 如果是补码运算则不存在符号与数值分开的问题。在补码运算时,把符号位也看成数值,一起参加运算,而且加法运算就一定是相加,减法运算就一定是相减,因此在计算机中对带符号的数进行加减时,最好使用补码。 补码的运算规则是:X补+Y补=(X+Y)补 设有两个数x和y,x=-89,y=+18,用补码表示如下 x=10100111B (-89的补码) y=00010010B (+18的补码) 若求x+y之和,可不用考虑两数的符号,直接相加,得出的和为x+y=11000111B(-71的补码),可见直接相加结果是正确的。 (列出算式) 若求x-y之差,也可以直接相减,即 x=101001l1B (-89的补码) -y=00010010B (+18的补码) x-y=10010101B (-107的补码) 可见直接相减结果也是正确的。

若求y-x之差,同样也用减法,即 y=00010010B (+18的补码) -x=10100111B (-89的补码) 也就是说做减法时,不论两数符号如何,其相减结果不论是数值还是符号都是正确的。 在上述y-x算式中,最高位发生的进(借)位只是因为在字长为8位的计算机中,若运算结果并未超出补码的记数范围(-128~+127),这时的进(借)位被视为自然丢弃。计算机在运算中,这种自然丢弃并不影响结果的正确性。 但要注意,如果字长为8位的计算机,其计算结果超过8位补码所允许的表示范围(即超出-128~+127),则其进位称之为溢出。溢出和自然丢弃是两种不同的概念。判别属于哪一种,则要看计算结果第7位与第8位的进位情况,如果第7位和第8位同时产生进位,即所谓双进位,则这种进位属于允许的自然丢弃。如果只有第7位或者只有第8位产生进位,即只有单进位,则这种进位属于溢出,溢出表示其数值超出计算机字长所能表示的范围,运算结果必然是错误的,因而也是不允许的。 应当注意的是,溢出的概念主要是指带符号二进制数进行加减运算时可能产生的一种结果。对于无符号数,第8位不是符号位,只有第8位的进位才称为进位,而不采用溢出这个概念。 对于无符号数的运算还应注意一点,当两个无符号数相减时,不允许用小的数去减大的数,因为小减大它的差一定是负数,无符号数的前提是没有符号,显然也不允许有负数,如果这样做,减的结果也必然是错误的。 五、字符的编码 (一)ASCII码

补码运算规则

补码(two's complement) 在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值位统一处理;同时,加法和减法也可以统一处理。此外,补码与原码的的相互转换,其运算过程是相同的,不需要额外的硬件电路。 补码的特性 1、一个整数(或原码)与其补数(或补码)相加,和为模。 2、对一个整数的补码再求补码,等于该整数自身。 3、补码的正零与负零表示方法相同。 机器数:计算机中参与运算的数被称为机器数,有以下特点, 1、计算机中参与运算的数均为二进制数,这是因为,运算电路是由只能识别“0”、“1”的数字电路组成。 2、机器数有带符号数和无符号数两种。 3、带符号的机器数有源码、反码和补码三种表示方式;无符号数没有源码、反码、补码的区别。 4、CPU的运算电路是按补码的运算规律设计,因此,进行运算的带符号数均用补码表示。 无符号数的运算 1、与手工二进制运算的方法相同(指运算电路)。 2、可以用十六进制数的运算代替二进制数的运算,计算时不容易出错,而且快捷。 源码表示法(带符号数) 1、正数。最高位是符号位,用“0”表示正号,即15~0位的第15位为0,7~0位的第7位为0。 2、负数。最高位是符号位,用“1”表示负号,即15~0位的第15位为1,7~0位的第7位为1。 3、求源码的方法:先将真值转换成二进制数,再写成固定的8位或16位,最高位用“0”或“1”表示数的正号和负号。计算机就是用这种方法表示。 真值就是带符号的十进制数(补码的绝对值),如+20、-20、+120、-120。在计算机内,如果是一个二进制数,其最左边的位是1,则我们可以判定它为负数,并且是用补码表示。若要得到一个负二进制补码的真值(原来的数值),只要对其求补码,就可得到真值。 【例5】-65的补码是10111111 若直接将10111111转换成十进制,发现结果并不是-65,而是191。 各位取反(除符号位):11000000,再+1:11000001(-65)

进制计算题

计算题试题 一、二进制的基本运算 1.做无符号二进制算术加法:()2+(00001001)2=() A.1 B. C. D. 5.做无符号二进制算术减法:()2—(00001001)2=() A. B. C. D. 6.二进制数10110与1101.11算术减的结果是二进制数______。 A. B. C. D. 7.二进制数1110与1101算术乘的结果是二进制数______。 A. B. C. D. 9.逻辑运算中的逻辑加常用符号________表示。 A.V B.∧ C.- D.? 10."两个条件同时满足的情况下结论才能成立"相对应的逻辑运算是_________运算。 A.加法 B.逻辑加 C.逻辑乘 D.取反 11.逻辑与运算:∧00001001的运算结果是___。(2007单选) A.00001000 B.00001001 C.D. 12.X与Y为两个逻辑变量,设X==11011,Y==10101,对这两个逻辑变量进行异或逻辑运算的结果是______。 A.11011 B.10101 C01110 D.10001 14.逻辑表达式1010×1011的运算结果是______。 A.1100 B.1011 C.1001 D.1010 15.做下列逻辑加法: V 00001001=() A.00001000 B. C.00001001 D. 16.做下列逻辑乘法:Λ 00001001=() A.00001000 B. C.00001001 D. 17.对两个二进制数1与1分别进行算术加.逻辑加运算,其结果用二进制形式分别表示为________。A. B. C.10,1 D. 18.二进制数和进行逻辑"与"运算结果再与进行“或”运算,其结果的16进制形式为________。A.A2 B.DE C.AE D.95 19.二进制数01011010扩大成2倍是。(2005单选) A1001110 B C D. (二)二进制补码相关计算

补码运算的法则

补码运算的法则 补码运算的法则要在“微机原理”这门课中讲到,在“数字电子技术”课中不作重点,只需一般了解即可。在数字电子技术教科书中,补码部分是用4位或5位2进制数来讲的,所以本文中也多以4、5位二进制数做例子。 利用补码运算必须确定运算数的位数,这样才能确定补码的模数。 在计算机中,带符号的数的表示方法有3种:原码、补码和移码。本文不讨论移码。 一、计算机中数的表示法 1. 原码 对一个二进制数而言,若用最高位表示数的符号(常以“0”表示正数,“1”表示负数),其余各位表示数的本身,则称为二进制数的原码表示法。例如: 设 A = + 1001 , B = - 0101,则[A] 原= 0 1001,[B]原= 1 0101。[A]原、[B]原分别是A、B的原码,是符号数值化了的数。符号数值化之前的带符号的数A、B称为是“真值”。 2. 补码 (1)补码的定义: 根据同余的概念 X + NK = X ( mod K ) ………………① 括号中的部分不参加运算,它表示“K是模”。N是任意整数。该式的含义是,数X与该数加上其模的任意整倍数之和相等。例如钟表的表盘,模为12,不论指针转了几圈,3点总是3点。用定义式表示,即 3 + N×12 = 3 在①式中,当N=1时 有[X] 补数= X + K,[X] 补数 称为是X的补数。 当0 ≤X <K时,[X] 补数= X (正数的补码是其本身) 当- K ≤X <0 时,[X] 补数= X + K(负数的补码= X+K = 模-|X|)例如表盘模= 12 当X = 3 时,[3] 补数= 3 ,其涵义是表针正着转了3 格; 当X = -3 时,[-3] 补数= -3+12 = 9 ,其含义就是指针倒着转了3格,就等于正着转了9 格。 (因为X<0 ∴X+K = 模-|X| ) 模= “在限定的位数中可表示的最大数”加1 。 在计算机中,一个机器数的字长为n位,它能够表示的最大数为n个“1”,其模为2n。例如4位的机器数中,n = 4,可表示的最大数为1111B(1111B表示是一个二进制数),其模就是1111B + 1 = 1 0000 = 24。 4位二进制数的模是1 0000,即16;而8位二进制数的模是1 0000 0000,即256。 再例如十进制的模是10 ,十二进制的模是12。

128的二进制有原码_反码和补码

第一次修订 2009-5-6 14:11 --------------------- 1.模的概念(我只讲个例子,具体的可以查数学中的 "同余模") 在日常生活中,有许多化减为加的例子。例如,时钟是逢12进位,12点也可看作0点。 当将时针从10点调整到5点时有以下两种方法: 1.将时针逆时针方向拨5格,相当于做减法: 10-5=5 2.将时针顺时针方向拨7格,相当于做加法:10+(12-5)=12+5=5 (模为 12) 2.模的运用(采用模得到补码) 1.补码的得来:是为了让负数变成能够加的正数,so,负数的补码=模-负数的绝对值 比如:-1 补码:1111 1111(10000 0000 -1得来) 当一个数要减1的时候,可以直接加 1111 1111 2.原码的得来:(负数的原码,直接把对应正数的最高位改为1) 原码能够直观的表示一个负数(能直观的把真值显示出来,如 -1为1000 0001 其中最高位表示符号位,不进行算术计算) 3.总结:补码相加,到第9位才舍弃(模10000 0000) 原码相加,到第8位舍弃(模1000 0000) 反码相加,到第8位舍弃(模1000 0000) 3.原码和补码之间转换: 1.补码=原码减1,再取反(便于理解) 或补码= 反码+1(便于描述和推理) 2.演示:补码=原码减1,再取反 如-1的原码1000 0001-->1000 0000(减1后)-->1111 1111(取反后)补码 3.演示:补码= 反码+1) 如-1的原码 1000 0001-->1111 1110(反码)-->1111 1111(加1)补码 4.重点:(特别是在有进位的时候) 原码和反码的最高位是符号位,不参加算术运算,模为1000 0000(比补码少一个0) 而补码所有位都可以相加,模为10000 0000(最高位不是符号位,补码是通过模减去负数绝对值得到的) 5.推断-128的原码和补码(用补码= 反码+1) 1.关于原码1000 0000,表示的是-0,还是-128呢?(答案是-128而不是-0) 1.先看看原码的概念吧:正数的符号位为0,负数的符号位为1,其它位按照一般的方法来表示数的绝对值 2.0是负数吗?0既不是正数也不是负数,那么它的符号位到底是0还是1呢?(0的符号位为0,不能为1) 3.看看负数补码的公式:负数的补码=10000 0000(模)-数的绝对值 比如:-1 1111 1111 =10000 0000-0000 0001 -2 1111 1110 =10000 0000-0000 0010 现在假设-0为负数,那么 -0的补码应该是10000 0000 - 0(这个0,姑且教0的绝对值吧)=0000 0000 反码:1111 1111(0000 0000 -1=0000 0000 +1111 1111=1111 1111) 原码:1000 0000

相关主题
相关文档
最新文档