zoukankan      html  css  js  c++  java
  • 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))
    
  • 相关阅读:
    采用get方式提交数据到服务器实例
    android之HttpURLConnection
    Android中的传感器
    有符号类型无符号类型转换
    一些常用位运算示例
    C++ / CLI 调用 C++ /Native 随记
    Linux Shell Demo
    Linux Shell 脚本入门
    Linux 编译 websocket++
    Linux 编写c++程序之openssl
  • 原文地址:https://www.cnblogs.com/c-x-a/p/10966454.html
Copyright © 2011-2022 走看看