bit演算(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