为什么python的zlib.crc32型需要按位和被认为是“稳定的”?

2024-05-15 07:49:12 发布

您现在位置:Python中文网/ 问答频道 /正文

Source

Changed in version 3.0: Always returns an unsigned value. To generate the same numeric value across all Python versions and platforms, use crc32(data) & 0xffffffff.

但是为什么我们需要使用二进制数都设置为1的位and呢?不管结果如何,结果都是一样的吗(因为在任何二进制数中,所有1的按位“与”将始终是相同的二进制数)?这个看似武断的细节让我很不舒服。你知道吗


Tags: andthetoinansourcevalueversion
1条回答
网友
1楼 · 发布于 2024-05-15 07:49:12

按位&强制将值转换为无符号整数。例如,考虑:

>>> -2 & 0xffffffff
4294967294

根据您引用的注释,在3.0中,Python被更改为始终返回无符号值,而在以前的版本中,crc32()方法可能返回有符号值。你知道吗

例如,在Python 2.7.11中:

>>> crc32('the quick brown fox')
-1849621814

但在Python 3.4.3中:

>>> crc32(b'the quick brown fox')
2445345482

所以这里的值不同,但如果在Python2.7中执行按位and,则得到的值与Python3.4中的值相同:

>>> crc32('the quick brown fox') & 0xffffffff
2445345482

相关问题 更多 >