Max*_*wer 24 script bash shell
我很好奇当 bash 中的数字变量在没有故意停止的情况下递增时会发生什么。这个数字能有多大?它会溢出并变成负数并永远继续增加吗?它会在某个时候破裂并滑行停止吗?
我正在使用 x86_64 AMD 处理器,但我也很乐意听到 32 位的答案,只需指定您在谈论哪个。我正在运行 Fedora21 64 位。
我已经搜索了很远很远的地方,但由于某些奇怪的原因还没有找到这个特定的花絮。似乎这将是所有手册等中的基本信息。
Spi*_*iff 27
这可能取决于您的 bash 版本、您的操作系统和您的 CPU 架构。你为什么不自己试试呢?将变量设置为 (2^31)-1,然后将其递增,将其设置为 2^32,然后将其递增,将其设置为 2^64,然后将其递增,等等。
在这里,我只是在运行 OS X "El Capitan" v10.11.3 的 Core i7 Mac 上亲自尝试过,看起来 bash 使用的是有符号的 64 位整数。
$ uname -a Darwin Spiff.local 15.3.0 达尔文内核版本 15.3.0:2015 年 12 月 10 日星期四 18:40:58 PST;根:xnu-3248.30.4~1/RELEASE_X86_64 x86_64 $ bash --version bash --version GNU bash,版本 3.2.57(1)-release (x86_64-apple-darwin15) 版权所有 (C) 2007 Free Software Foundation, Inc. $ $ ((X=2**16)); 回声$X 65536 <-- 好吧,至少 UInt16 $ ((X=2**32)); 回声$X 4294967296 <-- 好吧,至少 UInt32 $ ((X=2**64)); 回声$X 0 <-- 哎呀,不是 UInt64 $ ((X=(2**63)-1)); 回声$X 9223372036854775807 <--好吧,至少是 SInt64 $ ((X++)); 回声$X -9223372036854775808 <-- 溢出并包裹负片。必须是 SInt64
| 归档时间: |
|
| 查看次数: |
24151 次 |
| 最近记录: |