相关疑难解决方法(0)

Bash 中的按位移位和最大整数

这是一个探索性问题,这意味着我不完全确定这个问题是关于什么的,但我认为它是关于 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)

bash arithmetic

22
推荐指数
2
解决办法
2万
查看次数

标签 统计

arithmetic ×1

bash ×1