JavaScript中的XOR运算符与python中的XOR运算符不同

时间:2019-06-11 16:04:29

标签: javascript python

我正在尝试将一些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

2 个答案:

答案 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);

(由于21474836480x8000000,随机部分为“精细”,因此不会被截断)