Побитовое и против 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, все установлены в ноль.

Другие вопросы по тегам