繁体   English   中英

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

[英]XOR operator in javascript different from XOR operator in python

我试图将一些javascript代码复制到python中,由于某种原因,javascript中的XOR运算符(^)给出了与python中的XOR运算符(^)不同的值。 我有一个例子如下。 我知道由于Math.random(),值应该是不同的,但为什么它会像4位有效数字更长?

使用Javascript:

    console.log(Math.floor(2147483648 * Math.random()) ^ 1560268851466)
    = 1596700165

蟒蛇:

    import math
    math.floor(2147483648 * random.random()) ^ 1560268851466
    = 1559124407072

给定XOR的输入位,您的Python结果是正确的。 您的较长操作数大约为2 ^ 40,您的最终结果也是如此。

Javascript结果被截断为32位,即较短的操作数。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators

按位运算符将其操作数视为32位 (零和1)的序列,而不是十进制,十六进制或八进制数。 例如,十进制数字9具有1001的二进制表示。按位运算符在这样的二进制表示上执行它们的操作,但它们返回标准JavaScript数值。

但是,您正在使用的特定代码可以通过XOR来“修复”您的数字的32位部分,并简单地添加其余部分:

 // 1560268851466 = 0x16B_4745490A console.log( (Math.floor(2147483648 * Math.random()) ^ 0x4745490A) + 0x16B00000000); 

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM