算术运算二之补码系统的加法

  • 两个正数相加
    两个正数相加直接进行,注意两个数位数要保持一致

  • 正数与一个比它小的负数相加
    例如,+9和-4相加。记住:-4要用补码形式表示,所以+4(00100)必须转换成-4(11100)。
    在这里插入图片描述
    在这种情况下,加数的符号位是1。注意符号位也参加了加法运算的过程。事实上,在加法的最高位产生了一个进位。这个进位是要被忽略的,所以最后的和为00101,等于+5。

  • 正数与比它大的负数相加
    在这里插入图片描述
    这里和的符号位是1,所以是个负数。因为和是负数,它是补码形式,所以最后的4位1011,其实是和的补码。为了求出和数的真实值,必须对11011求相反数(2的补码);结果00101=+5。所以11011表示-5。

  • 两个负数相加
    在这里插入图片描述

  • 这里你可能有一个疑问,为什么负数要用补码表示呢?
    可以看一下这篇博客
    https://www.cnblogs.com/lihaichao/p/9627405.html
    https://blog.csdn.net/gaoshuang5678/article/details/50554143

  • 深入理解
    由于计算机需要用最高位来表示正负,在求补码的时候这一位是不动的。
    比如-1 二进制原码是1 0001,符号位1不动,对0010取反得1110,再加1得到补码1111,然后加上符号位1 1111,这就是负数的补码的计算。
    再来一个栗子,-15的原码 1 1111,对1111取反得0000,再加1得到0001,带上符号位 1 0001。
    这也是为什么没负0 负0原码1 0000, 0000取反1111加1得到 11111,位数溢出了。
    这个符号位让我想起了Java数据类型的取值范围,下一篇博客要了解一下

猜你喜欢

转载自blog.csdn.net/weixin_37711738/article/details/89598118