按位和反对0xfff - 没有意义?

时间:2012-09-19 16:43:36

标签: python bit-manipulation

根据此代码,您是否期望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。

我问的原因是我正在查看pyip中tcp.py的来源,其中基本上包含此代码而“& 0xffff”似乎毫无意义 - 我错过了什么?

1 个答案:

答案 0 :(得分:4)

“& 0xffff”产生差异的唯一时间是大于16位。即,执行逻辑 - 并产生一个值,其中比下16位更重要的位都被设置为零。