我正在尝试将一些JavaScript代码复制到python中,由于某种原因,javascript中的XOR运算符(^)给我的值不同于python中的XOR运算符(^)。我下面有一个例子。我知道值应该因Math.random()而有所不同,但是为什么它的长度像4个有效数字一样长?
Javascript:
console.log(Math.floor(2147483648 * Math.random()) ^ 1560268851466)
= 1596700165
Python:
import math
math.floor(2147483648 * random.random()) ^ 1560268851466
= 1559124407072
答案 0 :(得分:3)
给定XOR的输入位,您的Python结果是正确的。您的较长操作数约为2 ^ 40,因此最终结果也是如此。
Javascript结果已被截断为32位,即较短的操作数。
答案 1 :(得分:0)
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators:
按位运算符将其操作数视为 32位 (零和一)的序列,而不是十进制,十六进制或八进制数字。例如,十进制数9的二进制表示形式为1001。按位运算符对这种二进制表示形式执行操作,但是它们返回标准的JavaScript数值。
不过,您可以通过XOR
-将号码的32位部分“固定”,然后简单地添加其余部分来“固定”您所使用的特定代码:
// 1560268851466 = 0x16B_4745490A
console.log( (Math.floor(2147483648 * Math.random()) ^ 0x4745490A) + 0x16B00000000);
(由于2147483648
为0x8000000
,随机部分为“精细”,因此不会被截断)