python位运算版的算术四则运算

#!/usr/bin/python
# -*- coding: utf-8 -*-

class ElementOperator:
    def add(self, num1, num2):
        # 32bits integer max/min
        MAX = 0x7FFFFFFF
        MASK = 0xFFFFFFFF

        ans = num1
        while num2 != 0:
            ans = (num1 ^ num2) & MASK
            num2 = ((num1 & num2) << 1) & MASK
            num1 = ans
        return ans if ans <= MAX else ~(ans ^ MASK)

    def subtract(self, num1, num2):
        mid = self.add(~num2, 1)
        return self.add(num1, mid)

    def is_negative(self, num1, num2):
        return (num1 ^ num2) < 0

    def abs(self, num):
        if num >= 0:
            return num
        else:
            return self.add(~num, 1)

    def multiply(self, num1, num2):
        abs1 = self.abs(num1)
        abs2 = self.abs(num2)
        ans = 0
        while abs2 != 0:
            if abs2 & 1:
                ans = self.add(ans, abs1)
            abs2 = abs2 >> 1
            abs1 = abs1 << 1
        if self.is_negative(num1, num2):
            return self.add(~ans, 1)
        return ans



    def divide(self, num1, num2):
        # exception
        if num2 == 0:
            raise Exception("Divisor is zero.", num2)

        abs1 = self.abs(num1)
        abs2 = self.abs(num2)

        ans = 0
        i = 31
        while i >= 0:
            if (abs1 >> i) >= abs2:
                ans = self.add(ans, 1 << i)
                abs1 = self.subtract(abs1, abs2 << i)
            i = self.subtract(i, 1)
        if self.is_negative(num1, num2):
            return self.add(~ans, 1)
        return ans

if __name__ == '__main__':
    s = ElementOperator()
    print(s.add(5, 2))

转载于:https://www.cnblogs.com/c-x-a/p/10966454.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值