九. 位运算
位运算不需要转换成10进制, 因此处理速度非常快。
实战常用位运算
- x & 1 == 1 判断奇偶 ( x % 2 == 1 )
- x = x & (x-1) 清零最低位的1
- x & -x 得到最低位的1
67. 二进制求和
题目:给你两个二进制字符串,返回它们的和(用二进制表示)。
def addBinary(self, a: str, b: str) -> str:
x, y = int(a, 2), int(b, 2) # 直接转成2进制的int型
while y: # 直到进位问题都处理ok
answer = x ^ y
carry = (x & y) << 1 # 注意进位
x, y = answer, carry
return bin(x)[2:] # 转成10进制的int型
190. 颠倒二进制位
题目:颠倒给定的 32 位无符号整数的二进制位。
def reverseBits(self, n: int) -> int:
res = 0
for i in range(0, 32): # 0~31位共32位
if n & 1 == 1:
res += math.pow(2, 31-i) # 求和
n = n >> 1
return int(res)
191. 位1的个数
题目:位1的个数
思考:编码理论里的汉明重问题
def hammingWeight(self, n: int) -> int:
ret = 0
while n: # 直到n=0
n &= n - 1 # 清零最低位的1
ret += 1
return ret
网友评论