bit演算(range and)

/

bit演算(range and)について

タグ range and


概要

  • 2つのbit表現の数値(left, right)があるとき、その間の数値をすべてandをとった際にどんな値になるか
  • bit表現を縦に見た時、一つでも0があれば0であり、leftとrightの一致する最大のbitが[left, right]間の値をすべてandをとったものとなる

具体的なコード

def solve(left, right):
    shift = 0
    while 1:
        if left == right:
            break
        left = left >> 1
        right = right >> 1
        shift += 1
    return left << shift

assert solve(left = 5, right = 7) == 4
assert solve(left = 0, right = 0) == 0
assert solve(left = 1, right = 2147483647) == 0

参考