【问题标题】:How to achieve the output with binary operators?如何用二元运算符实现输出?
【发布时间】:2022-12-08 08:03:54
【问题描述】:

我有三个变量,并试图只使用二元运算符来获得结果。但不知何故它不起作用。

这不起作用:

const var1 = 0x4C44
const var2 = 3
const var3 = 1

const result = (var1 << 32) + (var2 << 16) + var3

console.log(result.toString(16))

这是我试图得到的:

const var1 = 0x4C44
const var2 = 3
const var3 = 1

const result = 0x4C4400030001

console.log(result.toString(16))

谁能指出我正确的方向?

【问题讨论】:

    标签: javascript binary-operators


    【解决方案1】:

    &lt;&lt; 运算符将数字转换为带符号的 32 位整数。见https://262.ecma-international.org/9.0/#sec-left-shift-operator

    这意味着当您将数字移动到超过 2^31 时,您会得到溢出和奇怪的结果。

    console.log(0x4C44 << 19)   //  1646264320
    console.log(0x4C44 << 20)   // -1002438656
    
    console.log((2**31)-1 << 0) //  2147483647
    console.log((2**31)   << 0) // -2147483648

    请改用 BigInteger 库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-26
      • 1970-01-01
      • 1970-01-01
      • 2014-10-03
      • 1970-01-01
      • 1970-01-01
      • 2023-01-26
      • 2017-04-09
      相关资源
      最近更新 更多