将 python 中位运算的结果与 js 保持一致

559 阅读1分钟

问题描述

在 js 和 python 中运行按位与运算结果不一致。

在 js 中执行的结果:

在 Python 中执行的结果:

问题原因

在 JavaScript 内部,数值都是以 64 位浮点数的形式储存,但是做位运算的时候,是以 32 位带符号的整数进行运算的,并且返回值也是一个 32 位带符号的整数。

解决方案

目的是使在 python 中的显示和 js 中的显示相同,就在 Python 中做一次从 uint32 到 int32 的转换。

代码:

import struct


num = 4023233417 & 2562383102


print(num)   # 2290649224


print(struct.unpack('i', struct.pack('I', num))[0])  # -2004318072

这样就和 js 中的结果完全一致了。

参考

codeday.me/bug/2019040…