gpt4 book ai didi

如果位移太多,Javascript 数字将重置为 0

转载 作者:行者123 更新时间:2023-11-29 10:02:56 25 4
gpt4 key购买 nike

所以我试图在 javascript 中创建一些函数来移动和操作数字位。但是,我在我的控制台中发现了以下行为

> var a = 1;
undefined
> a <<= 3
8
> a <<= 55
67108864
> a <<= 40
0

我的问题是,如果值在某个点以上变大,为什么数字会回到零?在 python 等其他语言中,数字不断变大,或者使用符号来保存数字的值。或者,显示溢出错误。为什么 JavaScript 只是将数字重置为零?

最佳答案

根据 the documentation :

Shift operators convert their operands to 32-bit integers in big-endian order and return a result of the same type as the left operand. The right operand should be less than 32, but if not only the low five bits will be used.

因此,在您的 55 (0x110111)40 (0x101000) 的情况下,您正在通过 23 (0x10111)8 (0x01000) 分别为:

> var a = 1;
undefined
> a <<= 3
8
> a <<= 23
67108864
> a <<= 8
0

请注意,虽然这些与您所写的不同,但答案与您得到 0 的原因相同,请考虑这些位:

> var a = 1;
undefined
> a <<= 3 + 23
67108864 // 0x000[00000100000000000000000000000000]
> a <<= 8
0 // 0x100[00000000000000000000000000000000]

方括号表示实际使用什么值来确定数字的值,左边的部分被丢弃。如您所见,您已经将 1 一直位移到数字左侧,导致 0 被遗留下来。

注意下面的代码片段,在到达第 32 个移位标记后,所有结果均为 0:

var a = 1;
for(var i = 1; i < 40; i++){
a <<= 1;
console.log(i, a);
}

关于如果位移太多,Javascript 数字将重置为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51386396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com