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