Побитовое и против 0xfff - бессмысленно?
Вы ожидаете, что будет какая-либо разница в значениях a и b, учитывая этот код:
s = "\x4f\x00\x00\x50\xae\x08\x00\x00"
a = map(lambda x:x & 0xffff, struct.unpack('HHHH', s))
b = map(lambda x:x, struct.unpack('HHHH', s))
в обоих случаях они заканчивают тем, что были этим списком:
[79, 20480, 2222, 0]
где каждый элемент является int.
Причина, по которой я спрашиваю, состоит в том, что я смотрю на исходный код tcp.py в pyip, который по сути включает этот код, а "& 0xffff" кажется бессмысленным - я что-то упустил?
1 ответ
Решение
Единственный раз, когда "& 0xffff" имеет значение, это когда больше 16 бит. А именно, выполнение логического-и производит значение, в котором биты, более значимые, чем младшие 16, все установлены в ноль.