如果我在bash(4.0.33(0)-release)中使用大于62的大于2的幂,则会发生以下情况:
$ time echo $((2**60))
1152921504606846976
real 0m0.000s
user 0m0.000s
sys 0m0.000s
$ time echo $((2**61))
2305843009213693952
real 0m0.000s
user 0m0.000s
sys 0m0.000s
$ time echo $((2**62))
4611686018427387904
real 0m0.000s
user 0m0.000s
sys 0m0.000s
$ time echo $((2**63))
-9223372036854775808
real 0m0.000s
user 0m0.000s
sys 0m0.000s
$ time echo $((2**64))
0
real 0m0.000s
user 0m0.000s
sys 0m0.000s
$ time echo $((2**65))
0
real 0m0.000s
user 0m0.000s
sys 0m0.000s
$
我猜这与两个人的补充有关?但是,有人可以更详细地解释为什么bash会以某种方式表现吗?
答案 0 :(得分:4)
正在对带符号的64位整数进行计算。为此
Python提供了比bash更好的大数字处理。
$ python -c 'print 2**256'
115792089237316195423570985008687907853269984665640564039457584007913129639936