位运算的5个题目和答案
时间: 2024-05-06 22:19:32 浏览: 6
1. 给定一个整数,将其转换为二进制表示后,返回其中位数为1的个数。
解答:使用位运算中的“与”操作符(&)和右移操作符(>>),循环判断每一位是否为1,统计个数即可。
```python
def hammingWeight(n: int) -> int:
count = 0
while n != 0:
count += n & 1
n = n >> 1
return count
```
2. 给定一个整数数组,其中只有一个数出现了一次,其他数都出现了两次,找出这个只出现一次的数。
解答:使用位运算中的“异或”操作符(^),将所有数进行异或操作,最终得到的结果就是出现了一次的数。
```python
def singleNumber(nums: List[int]) -> int:
res = 0
for num in nums:
res ^= num
return res
```
3. 给定两个整数m和n,将其中的m位替换成n的二进制表示的后m位。
解答:使用位运算中的左移操作符(<<)和右移操作符(>>),将n的后m位左移m位,再将m的位置清零,最后进行“或”操作(|)即可。
```python
def updateBits(m: int, n: int, i: int, j: int) -> int:
mask = ~0 << (j + 1) | (1 << i) - 1
m = m & mask
n = n << i
return m | n
```
4. 给定一个整数,判断是否为2的幂次方。
解答:使用位运算中的“与”操作符(&),判断该数的二进制表示中是否只有一位是1,如果是,则该数为2的幂次方。
```python
def isPowerOfTwo(n: int) -> bool:
return n > 0 and n & (n - 1) == 0
```
5. 给定一个整数,将其二进制表示中的所有0和1交换位置。
解答:使用位运算中的左移操作符(<<)、右移操作符(>>)和“异或”操作符(^),将所有0和1分别移到对应的位置上即可。
```python
def exchangeBits(num: int) -> int:
return (num >> 1 & 0x55555555) | (num << 1 & 0xaaaaaaaa)
```