Как найти позицию младшего значащего бита, в котором два числа отличаются в питоне? - PullRequest
1 голос
/ 11 декабря 2019

У меня есть два двоичных числа

01110

и

10010

Легко видеть, что первая позиция, в которой они отличаются, - третья справа. Как мне найти это в Python? Допустим, у меня было бы что-то вроде sdb(a, b), и в этом случае было бы 3. Есть ли лучшие варианты, чем перебирать 2-значный бит справа, используя leftshift?

1 Ответ

3 голосов
/ 11 декабря 2019

вы можете XOR два числа и XOR вернет 0, если оба бита одинаковы, и 1, если оба бита различны. таким образом, результат 01110 ^ 10010 будет 11100, и мы можем затем проанализировать его как строку, используя rindex для поиска первого 1, с которым мы столкнемся с правой стороны, поскольку это будет первое место, где биты были другими. Это даст нам индекс слева. затем мы вычитаем это из длины строки xor, чтобы получить количество бит справа от того места, где возникает разница.

def sdb(a: int, b: int) -> int:
    try:
        xor_string = f'{a^b:b}'
        index = len(xor_string) - xor_string.rindex('1')
    except ValueError as ve:
        #if no bits are different return index 0
        index = 0
    return index

num1 = int('01110',2)
num2 = int('10010',2)
print(sdb(num1, num2))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...