当我对大数进行加法时,bash 中发生了一些奇怪的事情

Something strange happens in bash when I add to large numbers

我在bash中执行整数汇总时遇到了一些奇怪的事情。这是为什么?

$ echo $(( 27989065672496370937 + 1 ))
-8904422474922732294

我的意思是,它看起来像戒指之类的东西。但后来我期望像 18.446.744.073.709.551.616 和 -18.446.744.073.709.551.616

它是 64 位 有符号 整数。这是最大的正数:

$ echo $((2 ** 63 - 1))
9223372036854775807

当你加一时:

$ echo $((2 ** 63))
-9223372036854775808

对于任意宽度的数字,您需要一个外部工具,例如 bc

$ bc <<< "27989065672496370937 + 1"
27989065672496370938