算法题目(1)
题目解答:编写函数 swapBits
我们需要编写一个 swapBits 函数,接受一个整数 num 和两个位索引 i 和 j,将这两个位置的二进制位交换。然后在 main 函数中,调用该函数对数字 10(二进制 1010)交换第 1 位和第 3 位,输出结果。
思路:
-
使用位运算可以很方便地进行二进制位的操作。
-
交换第
i位和第j位时,首先判断它们是否相等,如果相等,直接返回原始的数值。 -
如果不相等,我们通过如下步骤进行交换:
-
通过位掩码提取出第
i位和第j位的值。 -
通过 XOR 运算将它们交换。
-
具体步骤如下:
-
提取第
i位和第j位的值。 -
如果它们的值不同,则交换。
-
返回修改后的结果。
Python 代码实现:
def swapBits(num, i, j):
# 检查第 i 位和第 j 位是否相同,如果相同无需交换
if ((num >> i) & 1) != ((num >> j) & 1):
# 执行交换,通过异或运算
num ^= (1 << i) # 翻转第 i 位
num ^= (1 << j) # 翻转第 j 位
return num
def main():
# 初始数字 10 (二进制: 1010)
num = 10
# 交换第 1 位和第 3 位
result = swapBits(num, 1, 3)
print(f"交换后的结果: {result}(二进制: {bin(result)})")
if __name__ == "__main__":
main()
解释:
-
swapBits(num, i, j):-
我们首先通过
(num >> i) & 1获取第i位的值。类似地,(num >> j) & 1获取第j位的值。 -
如果这两个值不同,则通过异或操作
^来翻转这两个位置的值。num ^= (1 << i)用来翻转第i位,num ^= (1 << j)用来翻转第j位。 -
最后返回修改后的
num。
-
-
main():-
在
main函数中,我们设定初始值为num = 10,即二进制为1010。 -
然后调用
swapBits函数交换第 1 位和第 3 位,最后输出交换后的结果。
-
运行结果:
交换后的结果: 5(二进制: 0b101)
解释:
数字 10 的二进制是 1010,交换第 1 位和第 3 位后得到 0101,即数字 5。
浙公网安备 33010602011771号