补码运算特点与算术运算应用深度解析
补码运算是计算机内部处理数字和表示负数的一种重要方式,其主要特点在于能够有效地表示负数,并通过简单的运算规则实现正负数的混合运算,使用补码进行算术运算时,可以通过对补码进行加法或减法操作来得到最终结果,这种运算方式简化了计算机内部的处理过程,补码运算以其独特的表示方法和运算规则,提高了计算机处理效率和准确性。
很多朋友对于补码运算的特点和使用补码进行算术运算不太理解,今天小编来为大家分享,希望可以帮助到大家,为什么计算机中带符号数采用补码表示?丢开教科书式的概念,我们来探究为什么会有补码这个东西,以及符号位是如何产生的。
原码表示法是机器数的一种简单的表示法,其符号位用0表示正号,用1表示负号,数值一般用二进制形式表示,机器数的反码可由原码得到,如果机器数是正数,则该机器数的反码与原码一样;如果机器数是负数,则该机器数的反码是对它的原码(符号位除外)各位取反而得到的。
机器数的补码可由原码得到,如果机器数是正数,则该机器数的补码与原码一样;如果机器数是负数,则该机器数的补码是对它的原码(除符号位外)各位取反,并在未位加1而得到的。
如果是为了考试,可以死记,但我们要搞清楚为什么计算机里面的数要这样表达?意义何在?-128的补码为什么是10000000?为什么补码有这么奇怪的运算规则?计算机算减法的时候都需要从源码到补码的计算吗?
计算机内部只有加法器,没有减法器,所有的减法运算,都必须用加法进行,用补数代替原数,可把减法转变为加法,出现的进位就是模,此时的进位,就应该忽略不计,在二进制下,有多少位数参加运算,模就是在1的后面加上多少个0。
补码就是按照这个要求来定义的:正数不变,负数即用模减去绝对值,补充解释一下“模”的概念,可以参照离散数学里面的环:考虑时钟上时间的计算,假设现在时针指向数字3,若问“6小时前时针指向的数字是几”,可以将时针逆时针拨动6格,也可以将时针顺时针拨动12-6=6格,两者的结果是一样的,这里称12为“模”,故有3时-6个小时=3时+(12-6个小时),这里可以看到将减法转换成加法的过程,即“加上模减去绝对值的差”,假设模是10,当我们计算9-7的时候:9-7=>9+(10-7)=12,去掉最高的位后,得到2,这是正确的结果。
作者提到,计算机里面所有数都以补码形式保存,加减运算都是补码之间的加法运算,然后作者提出了一个观点:补数和补码的定义式里面,根本就没有什么符号位,这最高位的1、0是自然出现的,并不是由人来规定的,的确,符号位在补码运算里面是“模”,本身并不带符号的意义,因为计算机将加法转换成加上一个“负数”,而负数又以补码的形式表现,补码比源码多一位,从这多出来的一位可以推断出原来数字的正负号,所以成为了符号位,也可以这样认为,留出一位(不全部占满)的原因是要用“模”来表示正负数。
那么为什么-128的补码是10000000?可以这样理解。-128是一个负数,所以它的补码是它的“模”减去它的绝对值,那么为什么负数补码等于源码的反码加一呢?可以这样推导:由此我们得知,在计算机内部所有的数字都以补码形式存储。
还涉及到补码的运算溢出、什么是补码、变补和补码的区别等内容,简而言之,补码的设计目的是使符号位能与有效值部分一起参加运算,从而简化运算规则;使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计,负数的反码是对其原码按位取反,符号位不变;负数的补码是在其反码的末位加1,计算机的cpu内部运算单元就可以用一种加法器电路来实现加减运算了,另外需注意,8位的有符号数10000000B表示的是-128而非-0,这便引出了模的概念等,这些内容都需要我们深入理解并熟练掌握。 对大家有所帮助。