Bash 取幂限制

Сер*_*кий 3 bash exponential

我想了解$[a**b]在 Bash 中操作最大值的原因。

$ echo $[2**62]
4611686018427387904
$ echo $[2**63]
-9223372036854775808
$ echo $[2**64]
0
Run Code Online (Sandbox Code Playgroud)

Ben*_* W. 5

根据Bash 手册中的Shell 算术

评估以固定宽度的整数完成,不检查溢出

因此,在 64 位平台上,对于有符号整数,我们在 2 63处回绕:

$ echo $((2**63-1))
9223372036854775807
$ echo $((2**63))
-9223372036854775808
Run Code Online (Sandbox Code Playgroud)