当我对大数进行加法时,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
我在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