And*_*rew 21 javascript bit-shift
我有一个非常大的数字:5799218898.并希望将其右移到13位.
所以,windows-calculator或python给了我:
5799218898 >> 13 | 100010100100001110011111100001 >> 13 70791 | 10001010010000111
正如所料.
但是Javascript:
5799218898 >> 13 | 100010100100001110011111100001 >> 13 183624 | 101100110101001000
我认为这是因为javascript中的内部整数表示,但找不到任何相关内容.
ken*_*ytm 26
在ECMAScript(Javascript)中,按位操作始终为32位.因此,5799218898被斩波成32位,变为1504251602.这个整数>> 13给出了183624.
在Python中,它们是任意长度的整数.所以没有问题.
(Windows计算器中的数字是64位,足以容纳5799218898.)
(正确的答案应该是707912.)
小智 6
如果您使用现代浏览器,则可能需要对大于 32 位有符号的值使用 bigint。它们于 2020 年在 ECMAScript 语言第 11 版中引入。
据说,您还可以找到一个浏览器兼容性表:
还支持按位运算符,但 >>>(零填充右移)除外,因为每个 BigInt 值都有符号。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt
您可以执行以下操作,例如在 Chrome 中进行测试:
> Number(BigInt(5799218898) >> BigInt(13))
<- 707912
Run Code Online (Sandbox Code Playgroud)