ペアリング交換。できるだけ少ない命令(つまり、ビット0とビット1、ビット2とビット3など)を使用して、整数の奇数ビットと偶数ビットを交換するプログラムを作成します。
例1:
- 入力:num = 2(または0b10)
- 出力1(または0b01)
例2:
- 入力:num = 3
- 出力:3
サンプルコード:
class Solution(object):
def exchangeBits(self, num):
"""
:type num: int
:rtype: int
"""
# return ((num & 0xaaaaaaaa) >> 1) ^ ((num & 0x55555555) << 1)
# 与上面代码写的效果是一样的
return ((num & 0xaaaaaaaa) >> 1) | ((num & 0x55555555) << 1)
a = Solution()
b = a.exchangeBits(3)
print(b)
実行結果:
問題解決のアイデア
バイナリ演算とビット演算について:特定の位置の数値を取り出します。
奇数ビットを最初に操作してから、偶数ビットを操作することができます。
- 奇数ビットの場合、マスクとして101010(つまり、0xAA)を使用し、奇数ビットを抽出して、それらを1ビット右にシフトします。
- 偶数ビットの場合は、マスクとして010101(つまり、0x55)を使用し、偶数ビットを抽出して、1ビット左にシフトします。
ステップ:
- 偶数桁を取り出し、右に1シフトします
- 奇数桁の数字を取り出し、左に1シフトします
- 合計またはビット単位の排他的論理和