[英]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 。
操作數轉換為 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.