簡體   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