有符号整数的编码方式

原码

对于正数,反码、补码与原码相同,既[x]反=[x]原

反码

负数使用补码可以将符号位和其他位统一处理,同时,减法也可以按加法来处理,即如果是补码表示的数,不管是加减法都直接用加法运算即可实现

对于负数,符号位保持不变,其余位取反

例如0x07的反码表示为0B11111000

补码

正数的补码就是该数本身

对于负数,符号位保持不变,反码+1

例如0x07的补码表示为0B11111001


四则运算的过程

加法

4+5的运算过程

  1. 对两个数进行异或运算

    0B00000100 xor 0B00000101结果为0B00000001

  2. 判断是否有进位

    对相加的两个数进行与运算,当结果为0时,说明没有进位,则上一步的为最终计算结果

    0B00000100 and 0B0000010结果为0B00000100,说明有进位,进入下一步

  3. 继续异或

    将第二步的结果左移一位(进位)和第一步的结果进行异或运算
    0B00000001 xor 0B00001000结果为0B00001001
    重复上一步的过程判断是否有进位

  4. 判断是否有进位

    0B00000001 and 0B00001000结果为0,则上一步为最终计算结果
    如果不为0,则将位与运算的结果再次左移一位(进位)与第三步异或的结果重复以上过程


减法

4-5的运算过程

4-5通过4+(-5)实现,负数的补码直接和正数相加就能得到正确的结果,过程和加法一样

0X04 xor 0XFB结果为0XFF,再对两数进行位与运算,结果为0,说明没有进位,最终结果就是0XFF。如果位与结果不为0,则重复以上加法进位的计算过程。


乘法和除法

乘法和除法也通过加法实现