计算机数据运算 原码反码补码移码的解释与运算

目录


基本概念

有符号数与无符号数

计算机中,数的存放形式都是n位二进制数,为了区分正负性,往往把第一位空下来作为符号位,此种数就是有符号数。若在特定的应用中不需要负数,那么符号位自然就没有必要,此时二进制的每一位都是有效位,此种数就是无符号数

通常对有符号数来说,0表示正,1表示负,第一位表示符号位,其余为数值位,二进制数=符号位+数值位。若采用3位二进制数表示数时,对无符号数101表示5001表示1;对有符号数来说,101表示-1,,001表示+1

定点数与浮点数

如果计算机中考虑小数表示的话,就需要确定小数点的问题,即小数点该如何表示。一般规定某一位之前为整数部分,之后为小数部分,由此解决小数点问题。

对n位二进制数,如果小数点位置固定不变,就称为定点数;如果小数点位置根据二进制内容浮动的,就称为浮点数

各种码

计算机中,为了实现整数和小数的加减乘除,需要引入四种码:原码反码补码移码,其中补码是运算的核心,运算原理的支撑是数学逻辑。


原码

原码表示法

对于原码,第一位为符号位,0表示正,1表示负,其余部分为数值位。对于小数,只考虑绝对值小于1的小数表示。对绝对值大于或等于1的小数,用整数+小数组合即可,后续会有更详细的IEEE标准介绍组合表示方法。

考虑采用n位无符号二进制数表示非负整数非负小数

如果在无符号数前面加上符号位,即可表示一定范围的小数和整数,这对于计算机的数值运算已经足够了,对于整数的范围和小数的精度,无非就是二进制数采用多少位的问题。

需要注意的是,0在原码中有两种表示方法,一种是符号位为1,数值位表示0;另外一种是符号位为0,数值位表示0,如000与100均表示0.


反码

反码的地位

反码通常是原码计算补码或者补码计算原码的过程中,用于中间过渡的码,其存在只是为了更方便理解和表达。

反码的计算

反码的符号位与原码一致,数值位进行如下变换:对于正数,数值位不变;对于负数,数值位按位取反。注意,此规则并没有区分是整数还是小数,两者规则是一致的。


补码

补码的意义

补码很重要,是计算机进行四则运算的基础,更是计算机中体现数学逻辑与设计巧妙的地方。可以说,没有它,就没有今天看到的计算机,计算机的发展也就无处可谈。

补码的计算

补码的符号位与反码一致,数值位进行如下变换:对于正数,数值位不变;对于负数,数值位最后1位+1,注意考虑进位情况。

补码的处理逻辑

仔细分析计算过程,第一道减法题只是按位运算,而第二道减法题涉及借位运算

在电路设计中,按位直接运算的实现逻辑很简单,但是如果涉及借位,电路将十分复杂,且不一定高效实用,故需要找到一种方法,让电路避免进行进位计算。

对第二道计算题,可以采用这种方法:32-28=(99+32)-(28+100-1),注意到99=100-1,表达式换了之后结果不变,但是有趣的事情发生了!

(99+32)-(28+100-1)=(99-28)+(32+1)-100=104-100=4

99-28没有借位,104-100也没有借位,问题解决!

那么这和二进制补码有什么关系呢?看下面n位无符号二进制数的运算过程即可明白!


移码

移码可以用来直接比较大小,算法即为补码的符号位+1即可,用于浮点数的阶码(后续介绍)。

猜你喜欢

转载自blog.csdn.net/weixin_45792450/article/details/109044359