补码解释及运算法则_补码解释及运算

两个二进制补码)1、在计算机系统中,数值总是用补码来表示(存储)。主要原因是:使用补码,符号位和其他位可以统一处理;同时,减法也可以当作加法。此外,当用补码表示的两个数相加时,如果最高有效位(符号位)有进位,则该进位被丢弃。2、的补码和原码的转换过程几乎是一样的。求给定值的补码分为以下两种情况:(1)正数的补码与原码相同。【例1】9的补码是00001001。(2)负数补码的符号位为1,其他位为该数绝对值的原码逐位取反;然后在整数上加1。【例2】求-7的补数。因为给定的数是负数,所以符号位是“1”。后七位:7的原码(0000111)逐位取反(1111000)加1(1111001),所以-7的补码是1111001。已知一个数的补码,求原码的运算可以分为两种情况:(1)如果补码的符号位为“0”,说明它是一个正数,它的原码就是这个补码。(2)如果补码的符号位是“1”,表示负数,那么找到这个补码的给定补码就是所需要的原码。另一种求负数补数的方法如下:比如求-15的补数。第一步:15: 00001111。第二步:逐位取逆(1变0,0变1),最后再加1。11110001再举一个例子验证:求-64的补码64: 01000000110000【例3】若已知一个补码为1111001,则原码为10000111(-7)。因为符号位是“1”,表示负数,所以该位保持不变,仍然是“1”。另外七位数字1111001,反过来就是0000110;加1,所以是10000111。文件《闲扯原码、补码、补码》中没有提到一个很重要的概念“模块”。这里我简单介绍一下“模式”的概念:“模式”是指一个计量系统的计数范围。例如时钟。电脑也可以看作是一台测量机,它也有一个测量范围,即每个人都有一个“模型”。比如时钟的量程是0 ~ 11,模数是12。n位的计算机测量范围为0 ~ 2 (n)-1,模数为2 (n)。“模数”本质上是电表产生的“溢流”量,其数值无法在电表上表示,只能在电表上表示模数的余数。任何带模数的量规都可以从减法转换成加法。举个例子,如果当前时针指向10点,准确时间是6点,有两种方法可以调整时间:一种是向后拨4小时,即10-4=6,另一种是向前拨8小时:10 8=12 6=6。在12模系统中,加8和减4的效果是一样的,所以任何减4的运算都可以用加8代替。对于“模块”,8和4是相辅相成的。事实上,在一个12模块的系统中,11和1,10和2,9和3,7和5,6和6都具有这种特性。共同的特点是两者之和等于模数。对于计算机来说,概念和方法是完全一样的。对于n位计算机,设n=8,可以表示的最大数是11111111。如果加一个就叫100000000(9位),但是因为只有8位,最高位1自然就没了。返回00000000,所以8位二进制的模数是2 ^ 8。在这样的系统中,减法问题也可以转化为加法问题,只能用相应的补数来表示减法。将补码应用于计算机对数的处理就是补码。另外两个概念,一的补数指的是正数=原码,负数=二的补数指的是通常所说的补数。(3).补码的绝对值(称为真值)[例4]-65的补码是10111111。如果直接把1011111转换成十进制,会发现结果不是-65,而是191。其实在计算机中,如果是一个二进制数,它最左边的位是1,那么我们就可以确定它是负的,用它的补数来表示。要得到一个负二进制数的绝对值(称为真值),只需要将每一位(包括符号位)取反,加1即可得到真值。

比如二进制值:10111111(65的补码)反过来:0100000加1:0100001(65的补码)代数加减运算1、补码加法[X Y]补码=[X]补码[Y]补码[例5] X. Find [X Y]补码[X]补码=00110011 [Y]补码=[X]补码[Y]补码=00110002、补码减法[X-Y]补码=[X]补码-[Y]补码=[X]补码[-Y]其中[-Y]补码称为负补码,求负补码的方法是:将所有位(包括符号位)逐位反转;然后在整数上加1。【例6】1(-1)【十进制】1的原码000000001转换成它的补码:000001-1的原码100000001转换成它的补码:111111111 1(-1)=0 0000000001 1111=0000000000。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 0k1 * 2 1k2 * 2.k (n-2) * 2 (n-2)其中k0,k1,k2,k (n-2)为1或0,设a在此。2 (n-1)的二项式展开式为:12 02 12 2.2 (n-2),并且在公式中:-a=2 (n-1)-2 (n-1)-a,2 (n-1)-a代入a=k0 * 2 0k1 * 2 1k2 * 2.k (n-2) * 2 (n-2)和2 (n-1)=12 02 12 2.2 (.因为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转换成十进制时,必须乘以2 (n-1),这是n位二进制的模。不能粘贴公式,所以看起来很麻烦。如果写成代数表达式,看起来非常方便。注:N位二进制,最高位是符号位,所以数值范围是-2 (n-1) ——2 (n-1)-1,所以取模是2 (n-1)。上面提到的8位二进制模是2 ^ 8,因为最高有效位是一个无符号位,它代表的数值范围是0——2 ^ 8-1。在C语言中,补码用于存储和运算。