[英]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.