Bash算术给出了错误的答案

1 math bash overflow echo

任何人都可以解释为什么这不能给出正确的答案?它与溢出有关吗?

$ echo $(((729669216169173060 * 256) + 73))
2327878602212787273
Run Code Online (Sandbox Code Playgroud)

但答案应该是186795319339308303433.

anu*_*ava 7

bash算术可以将整数保存为64位有符号long int.这意味着允许的最大数量是:

9223372036854775807
Run Code Online (Sandbox Code Playgroud)

如果你这样做:

echo $((9223372036854775807 + 1))
-9223372036854775808
Run Code Online (Sandbox Code Playgroud)

所以溢出发生了.而你正在努力:

729669216169173060 * 256
186795319339308303360
Run Code Online (Sandbox Code Playgroud)

这远不止于此9223372036854775807.