当我添加到大数字时,bash 中发生了一些奇怪的事情

问题描述

我在 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