Я новичок в Python и не могу это понять. Может кто-то помочь сломать заявление для меня?Понимание побитовых, арифметических и булевых операторов Python
И п и четность представляют собой целые числа
n += parity != n & 1
Я новичок в Python и не могу это понять. Может кто-то помочь сломать заявление для меня?Понимание побитовых, арифметических и булевых операторов Python
И п и четность представляют собой целые числа
n += parity != n & 1
Выражение оценивается как n += (parity != (n & 1))
, а результаты:
n & 1
является битовая маска, это маскирует целые n
вниз наименее значимый бит. Если n
является нечетным, оно будет 1
, если оно четное, этот бит будет 0
.
parity != 0
или parity != 1
производит логическое результата, True
или False
, сигнализация, если parity
не был равен или 0
1
справа.
Образовавшееся True
или False
добавляют до n
, как если бы вы делали n = n + True
или n = n + False
. Булевский тип Python является подклассом из int
и False
имеет целочисленное значение 0
и True
значение 1
.
код, по существу, является добавление 0
или 1
к n
, основываясь на значении parity
и если n
в настоящее время четным или нечетным.
Короткая демонстрация может проиллюстрировать это лучше.
Во-первых, производство n & 1
0
или 1
:
>>> n = 10 # even
>>> bin(n) # the binary representation of 10
'0b1010'
>>> n & 1 # should be 0, as the last bit is 0
0
>>> n = 11 # odd
>>> bin(n) # the binary representation of 11
'0b1011'
>>> n & 1 # should be 1, as the last bit is 1
1
Далее, parity != 0
или parity != 1
часть; обратите внимание, что я предполагаю, что parity
ограничивается 0
или 1
, это действительно не имеет смысла для того, чтобы иметь другие значения:
>>> parity = 0
>>> parity != 1
True
>>> parity != 0
False
>>> parity = 1
>>> parity != 1
False
>>> parity != 0
True
последнее, что булевы являются целыми числами:
>>> isinstance(True, int)
True
>>> int(True)
1
>>> 10 + True
11
>>> 10 + False
10
Формула выглядит как он вычисляет CRC checksum.
Позволяет разбить это вниз:
(n += (parity != (n & 1)))
(n & 1)
это битовая, и принимает значение наименьшего (младшего значащего бита) n
.
parity !=
это верно, если parity
отличается от результата (n & 1)
n +=
это приращение n
на любое значение, остальная часть строки возвращает.
n parity output(increment of n)
0 1 1
1 1 0
1 0 1
0 0 0
Из приведенной выше таблицы видно, что она функционирует как XOR n LSB и четность.
Примечания: Обычно четность - это нечетность (1) или четность (0) пакета данных.
Надеюсь, это поможет! Наслаждаться.
Что такое 'n' и' parity', определенные как? –
Можем ли мы получить некоторый контекст для этого кода? Есть ли у вас ощущение того, какие типы переменных n и четность? –
и n и четность являются целыми числами –