整数四则运算的计算过程
有符号整数的编码方式
原码
对于正数,反码、补码与原码相同,既[x]反=[x]原
反码
负数使用补码可以将符号位和其他位统一处理,同时,减法也可以按加法来处理,即如果是补码表示的数,不管是加减法都直接用加法运算即可实现
对于负数,符号位保持不变,其余位取反
例如0x07的反码表示为0B11111000
补码
正数的补码就是该数本身
对于负数,符号位保持不变,反码+1
例如0x07的补码表示为0B11111001
四则运算的过程
加法
4+5的运算过程
对两个数进行异或运算
0B00000100 xor 0B00000101结果为0B00000001判断是否有进位
对相加的两个数进行与运算,当结果为0时,说明没有进位,则上一步的为最终计算结果
0B00000100 and 0B0000010结果为0B00000100,说明有进位,进入下一步继续异或
将第二步的结果左移一位(进位)和第一步的结果进行异或运算
0B00000001 xor 0B00001000结果为0B00001001
重复上一步的过程判断是否有进位判断是否有进位
0B00000001 and 0B00001000结果为0,则上一步为最终计算结果
如果不为0,则将位与运算的结果再次左移一位(进位)与第三步异或的结果重复以上过程
减法
4-5的运算过程
4-5通过4+(-5)实现,负数的补码直接和正数相加就能得到正确的结果,过程和加法一样
0X04 xor 0XFB结果为0XFF,再对两数进行位与运算,结果为0,说明没有进位,最终结果就是0XFF。如果位与结果不为0,则重复以上加法进位的计算过程。
乘法和除法
乘法和除法也通过加法实现
署名-非商业性使用本文采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ZEKALRYN'S BLOG!
评论
