#!/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))

最新文章

  1. Error : should use android:showAsAction when not using support library
  2. C#快捷键
  3. Javascript下拉导航
  4. ASP.NET 访问母版页元素总结
  5. mysql:You can&#39;t specify target table &#39;bpm_tksign_data&#39; for update in FROM clause
  6. 12 factor 目录
  7. Python文本(字面值)
  8. Linux 删除文件后空间不释放磁盘空间
  9. 去掉eclipse的xml和js验证
  10. Android EditText控件行尾为表情时的BUG
  11. 理解SQL Server中索引的概念
  12. jQuery判断页面滚动条滚动方向
  13. SQL-Duplicate Emails
  14. LNMP的安装
  15. Salesforce开发入门
  16. css美化页面
  17. linux环境中,如何解压后缀是bz2的压缩包?tar.bz2格式的压缩包,如何进行解压?
  18. MD5 几种方法的选择
  19. 使用Timer组件_实现定时更改窗体颜色
  20. WeTest功能优化第3期:业内首创,有声音的云真机

热门文章

  1. aspectcore 简单解析
  2. zepto学习(一)之click事件和tap事件比较
  3. 正则表达式split匹配多种例如 “】”,“,”两种(页面级中英文切换方案)
  4. 手把手封装axios
  5. WinPE基础知识之代码解析
  6. shell脚本编写之Hello World
  7. 【4】Kafka集群启动/关闭脚本
  8. NORDIC 协议栈下使用硬件定时器
  9. VSCode 快捷键定义
  10. pycharm连接云端mysql