数的进制

数的进制

二进制

计算机只能进行加法运算,其它复杂的运算都是在加法的基础上构建的

运算相关:

原码
反码
补码

正数的补码是原码;负数的补码是原码符号位不变,而其它位按位取反末尾加1

负数的补码的另一种求法:

先对负数的二进制求绝对值,再将绝对值的每一位都按位取反后再末尾加1。

特别地:二进制的负数补码转换为原码也是通过符号位不变其它位按位取反末尾加1;或者是先对补码减1再符号位不变,其它位按位取反,即是原码转补码的逆过程(当然前面的方法更通用点)。

比较:

1.先取反再加一;

3+1-3+1

2.先减一再取反。

31-(3-1)

两种方法得到的结果相同:

3+1=31-3+1=-(3-1)

二进制数进行运算时:

注意:补码之间运算得到的结果仍然为补码,要转换为原码才是最终的真值。

补码 的运算

补码的算术运算
补码运算要注意的问题:
  • 1.补码运算时,其符号位与数值部分一起参加运算。

  • 2.补码的符号位相加后,如果有进位出现,要把这个进位舍去(自然丢失)。

  • 3.用补码运算,其运算结果亦为补码。在转换为真值时,若符号位为0,数位不变;若符号位为1,应将结果求补才是其真值。

  • 正数转换为负数时,所有位取反末位加1;

[例题]

[例3] 已知X = + 1101 , Y = + 0110 , 用补码计算Z = X-Y。解: [X]补 = 01101,[-Y]补 = 11010,则[Z]补 =[X]补+[-Y]补 = 01101+11010
= 100111 , 其真值为Z = + 0111。

α\color{red}\alpha[例3] 已知X = 01101 , Y = 00110 , 用补码计算Z = X-Y。解: [X]补 = 01101,[-Y]补 = 11010,则[Z]补 =[X]补+[-Y]补 = 01101+11010
= 100111 , 其真值为Z = 00111。

011011101010011101101\\11010\\ \\ 1_-00111

[例4] 已知X = + 0110 , Y = + 1101 , 用补码计算Z = X-Y。解: [X]补 = 00110,[-Y]补 = 10011,则[Z]补 =[X]补+[-Y]补 = 00110 + 10011
= 11001 , 其真值为Z = - 0111。

β\color{red}\beta[例4] 已知X = 00110 , Y = 01101 , 用补码计算Z = X-Y。解: [X]补 = 00110,[-Y]补 = 10011,则[Z]补 =[X]补+[-Y]补 = 00110 + 10011
= 11001 , 其真值为Z = 10111。

carry进位是对无符号数运算有意义的标志位,而overflow是对有符号数运算有意义的标志位\textcolor{red}{carry进位是对无符号数运算有意义的标志位,而overflow是对有符号数运算有意义的标志位}

溢出及补码溢出的判断无论采用何种机器数,只要运算的结果大于数值设备所能表示数的范围,就会产生溢出。 溢出现象应当作一种故障来处理,因为它使结果数发生错误。异号两数相加时,实际是两数的绝对值相减,不可能产生溢出,但有可能出现正常进位;同号两数相加时,实际上是两数的绝对值相加,既可能产生溢出,也可能出现正常进位。由于补码运算存在符号位进位自然丢失而运算结果正确的问题,因此,应区分补码的溢出与正常进位。
[例5] 某数字设备用五位二进制表示数,计算(1)9+3 (2)-9-3 (3)9+12 (4)-9-12
解:

​ (1)[+9]补+[+3]补= 01001+ 00011 = 01100 = +12 正确;​ (2)[-9]补+[-3]补= 10111+ 11101 = 110100 = 10100(符号位进位自然丢失), 其真值为11100=-1100 = -12正确;

101111110111010010111\\11101\\110100

​ (3)[+9]补+[12]补= 01001 + 01100 = 10101 其真值为11011=-1011 =-11错误,产生了溢出;010010110001001\\01100​ (4)[-9]补+[-12]补 = 10111+10100 = 101011 其真值为01011= +11 错误,产生了溢出。(1)、(2)两题结果均正确,查其最高位和次高位的进位位,不是均无进位产生,就是均产生进位;(3)、(4)两题结果均错误,查其最高位和次高位的进位位,只有一位产生了进位。此即为判断机器是正常进位还是溢出的基本依据,在微型机中可用异或电路来实现上述的判断。

负数的减法运算也要设法化为加法来做,其所以使用这种方法而不使用直接减法,是因为它可以和常规的加法运算使用同一加法器电路,从而简化了计算机的设计。

关于有符号数的溢出判断

img

详解参考:(64条消息) 有符号数溢出判断–超详细,新手进_九十度转角9的博客-CSDN博客_有符号数溢出

二进制正数与负数的转换:

正数转换为负数:所有位取反末位加1;

比如:00000001取反加1后为11111111,11111111表示的是补码,所以要转换为原码为10000001,而10000001表示的是-1。

负数转为正数:最高位置0即可,相当于求绝对值。
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2023-2024 Guijie Wang
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信