题目链接

需要用到的位运算操作:异或(^)、与(&)、右移(<<)

  • 异或运算:又称不进位加法,a^b得到的结果为a与b相加,但是需要进位的地方不进位得到的结果
  • 与运算:找出来a和b中均为1的位置,利用右移操作来实现进位
  • a+ba+ba+b可以转换成位运算:a+b=(a^b)+(a&b<<1),持续进行到a&b=0结束即可

Java代码:

public class Solution {
/**
* @param a: An integer
* @param b: An integer
* @return: The sum of a and b
*/
public int aplusb(int a, int b) {
while(b!=0){
int _a=a^b;
int _b=(a&b)<<1;
a=_a;
b=_b;
}
return a;
// write your code here
}
}

Python代码:

对于Python来说,因为Python没有符号位右移操作,所以需要检查当前数字是否超过了int范围,0xffffffff保证了在位运算的过程中,数字范围均不超过int

while循环结束后,将结果与0x7fffffff比较

如果小于等于0x7fffffff,说明当前结果没有超过int范围,直接输出

如果大于0x7fffffff,说明当前结果超出了int范围,需要转换到int范围内

class Solution:
"""
@param a: An integer
@param b: An integer
@return: The sum of a and b
"""
def aplusb(self, a, b):
while(b!=0):
# &0xffffffff的目的是将a,b的范围限制在int内
a,b=(a^b)&0xffffffff,((a&b)<<1)&0xffffffff
# 和int范围的最大值进行比较
if a<=0x7fffffff:
return a
# 将无符号位的数转换成有符号位的数
else:
return ~(a^0xffffffff)
# write your code here

最新文章

  1. oracle数据库_实例_用户_表空间之间的关系(转)
  2. C# 游戏服务器框架
  3. 20145225《Java程序设计》 第7周学习总结
  4. 各种matrix
  5. 如何用 iptables 禁止某个ip?
  6. Linux Bash算数运算方法小结
  7. nginx模块开发获取post参数
  8. spark基本概念
  9. c++宏源证券编程
  10. Scala中的语言特性是如何实现的(3) -- Trait
  11. C#常用8种排序算法实现以及原理简介
  12. 在ERP中定义用户时报错:SqlDateTime 溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间
  13. jdbc批量插入
  14. a标签和p标签不能设置margin
  15. 全网最详细的Windows系统里PLSQL Developer 64bit的下载与安装过程(图文详解)
  16. Swift3.0:照片选择
  17. CC2530低功耗设置(针对终端设备)
  18. Mysql读写分离——主从数据库+Atlas
  19. ZABBIX API简介及使用
  20. 名词解释:alpha版、beta版、rc版的意思(转)

热门文章

  1. Android View的滑动
  2. hdu1098
  3. Mysql基本操作命令【转载】
  4. Saiku数据库迁移H2迁移到Mysql(二十二)
  5. 【转】 android5.1里面的user-app的默认权限设置!
  6. perceptual loss
  7. java 反射获取方法返回值类型
  8. 使用junit和eclemma进行简单的代码测试
  9. 转载-Python单元测试框架——unittest
  10. 基于.NET平台常用的框架整理&lt;转载&gt;