这是一个探索性问题,这意味着我不完全确定这个问题是关于什么的,但我认为它是关于 Bash 中最大的整数。无论如何,我会明示地定义它。
$ echo $((1<<8))
256
Run Code Online (Sandbox Code Playgroud)
我通过移动一点来产生一个整数。我能走多远?
$ echo $((1<<80000))
1
Run Code Online (Sandbox Code Playgroud)
显然没有那么远。(1 是出乎意料的,我会回到它。)但是,
$ echo $((1<<1022))
4611686018427387904
Run Code Online (Sandbox Code Playgroud)
仍然是积极的。然而,不是这个:
$ echo $((1<<1023))
-9223372036854775808
Run Code Online (Sandbox Code Playgroud)
再往前走一步,
$ echo $((1<<1024))
1
Run Code Online (Sandbox Code Playgroud)
为什么是 1?为什么会出现以下情况?
$ echo $((1<<1025))
2
$ echo $((1<<1026))
4
Run Code Online (Sandbox Code Playgroud)
有人想分析这个系列吗?
更新
我的机器:
$ uname -a
Linux tomas-Latitude-E4200 4.4.0-47-generic #68-Ubuntu SMP Wed Oct 26 19:39:52 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)