簡體   English   中英

XOR output 在 Javascript 中是錯誤的

[英]XOR output is wrong in Javascript

我正在執行以下操作

 let a = 596873718249029632; a ^= 454825669; console.log(a);

Output 是454825669但 output 應該是596873718703855301 我在哪里做錯了? 我應該怎么做才能得到596873718703855301作為 output?

編輯:我正在使用 nodejs Bigint 庫,我的節點版本是 8.12.0

var bigInt = require("big-integer");

let xor = bigInt(596873718249029632).xor(454825669);
console.log(xor)

Output 是

{ [Number: 596873717794203900]
  value: [ 4203941, 7371779, 5968 ],
  sign: false,
  isSmall: false } 

這是錯誤的。 它應該是596873718703855301

來自關於 XOR 的 MDN 文檔

操作數轉換為 32 位整數並由一系列位(零和一)表示。 超過 32 位的數字將被丟棄其最高有效位。

由於596873718249029632的 32 個最低有效位均為 0,因此a的值實際上是0 ^ 454825669 ,即454825669

要獲得596873718703855301 的預期值,可以使用 BigInts 596873718703855301它允許您執行Number原語范圍之外的操作,因此現在您的代碼將變為:

 let a = 596873718249029632n; a ^= 454825669n; console.log(a.toString());


為了響應您的編輯,在使用整數和Number時,您需要確保您的值不超過Number.MAX_SAFE_INTEGER (等於 2 53 - 1,超過該點,雙精度浮點數會失去足夠的精度來表示整數) . 以下片段對我有用:

var big_int = require("big-integer");
let xor = bigInt("596873718249029632").xor("454825669");
console.log(xor.toString());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM