Python битовая маска не дает ожидаемого результата - PullRequest
0 голосов
/ 01 апреля 2020

Я помещаю битовую маску в значение чтения регистра и выполняю логическое и значение. я ожидаю: clear_reg_val: 00000000000000000100100000000000 Мой фактический вывод:

# reg_value is:  00000000000000000100100000001100
# mask_inverted: 11111111111111111111100000000011
# clear_reg_val: 00000000000000000100100000001000
# reg_value is:  00000000000000000100100000001100
# mask_inverted: 11111111111111111111100000000011
# clear_reg_val: 00000000000000000100100000001000

Так что я не знаю, почему бит 4 clear_reg_val становится «1» вместо «0». Python код функция добавлена ​​на скриншоте ниже:

Python функция для чтения, изменения, записи

1 Ответ

2 голосов
/ 01 апреля 2020

Ошибка в том, как вы создаете инвертированную маску.

Вы делаете это как строковую операцию и конвертируете строку обратно в целое число, используя int. Вы забыли указать base=2, и строка обрабатывается как десятичное число.

Правильный способ инвертировать 32-битное значение:

MASK32 = 2**32-1

invx = ~x & MASK32
...