第6节课后习题有一个让计算机崩溃的小代码 2**2**3
为什么写成(2**2)**3 计算机就可以正常计算出值来写成 2**2**32电脑就没有反应 真的崩溃了
我这算不算钻牛角尖还请知道的朋友给与解释哈 我感觉可能是运算顺序的问题,应该是先计算了2**32,所以... 数学问题,先计算a=2^32,后计算2^a 1. 2 ** 2 ** 32 的计算量非常大,会导致系统崩溃
2. (2 ** 2) ** 3 我口算都能算出来时 64,所以~~~ {:10_254:} 然而我感觉你应该是问题写错了,你应该是要问:
为何 2 ** 2 ** 32 会崩溃,然而 (2 ** 2) ** 32 则不会有问题,对吗?
这其实跟 ** 运算符的结合性有关系,它是从右向左结合的,所以你会发现:
2 ** 2 ** 3 == 2 ** (2 ** 3) == 2 ** 8 == 256
而
(2 ** 2) ** 3 == 4 ** 3 == 64
所以
2 ** 2 ** 32 == 2 ** 4294967296,不崩溃才怪~~
(2 ** 2) ** 32 == 4 ** 32 == 18446744073709551616
数字太大了吧... 多谢小甲鱼老师的指点
原来是**是从右往左结合的太神奇了 又学到一手,**从右向左计算 原来是从右向左的怪不得 学到了学到了哎**是从右向左结合的,这个知识虽然感觉有点冷不过说不定有的时候又很有用…… 加个括号试试 小甲鱼 发表于 2016-6-14 12:06
然而我感觉你应该是问题写错了,你应该是要问:
为何 2 ** 2 ** 32 会崩溃,然而 (2 ** 2) * ...
原来如此!TVT 找到正确答案了,感谢!0v0 小甲鱼 发表于 2016-6-14 12:06
然而我感觉你应该是问题写错了,你应该是要问:
为何 2 ** 2 ** 32 会崩溃,然而 (2 ** 2) * ...
为啥我没有奔溃,而是毫无反应?
Python 3.8.2 (tags/v3.8.2:7b3ab59, Feb 25 2020, 22:45:29) on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>> 2**2**32
页:
[1]