位运算符在刷leetcode和某些极端情况下偶尔会用到。
这里,我用python做一个演示,主要涉及与运算符(&),或运算符(^),进位运算符(<<)
1.与运算符(&)
只有当两个位数相同且都为1时才为1
1&1
#输出为:1
1&0
#输出为:0
0&0
#输出为:0
1&2
#输出为:0
(因为2在二进制下为10,10与1没有相同的位数返回0)
2.或运算符(^)
两个位数不同才为1,见之前的文章(https://blog.csdn.net/weixin_44731100/article/details/89156141)
3.进位运算符(<<)
和十进制一样,用于进位
1<<1
#1向前进一位应该是二进制的10,即为2.所以输出为2
1<<2
#1向前进二位应该是二进制的100,即为4,所以输出为4
了解了以上原理后,针对面试题:写一个函数求两数之和,要求函数内不得使用加减乘除四则运算。
def add(a,b):
while b != 0:
#先计算各个位上不同的位数
a = a^b
# 对于两个数字位上都是1的情况进行进位,并进一步相加
b = (a&b)<<1
return a