有你真好2016 发表于 2016-6-14 11:12:02

第6节课后习题有一个让计算机崩溃的小代码 2**2**3

为什么写成(2**2)**3 计算机就可以正常计算出值来
写成 2**2**32电脑就没有反应 真的崩溃了
我这算不算钻牛角尖还请知道的朋友给与解释哈

挥舞乾坤 发表于 2016-6-14 11:24:01

我感觉可能是运算顺序的问题,应该是先计算了2**32,所以...

dnf836659378 发表于 2016-6-14 11:38:23

数学问题,先计算a=2^32,后计算2^a

小甲鱼 发表于 2016-6-14 12:01:09

1. 2 ** 2 ** 32 的计算量非常大,会导致系统崩溃

2. (2 ** 2) ** 3 我口算都能算出来时 64,所以~~~

小甲鱼 发表于 2016-6-14 12:06:24

{: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

allen-xy 发表于 2016-6-14 12:18:12

数字太大了吧...

有你真好2016 发表于 2016-6-14 13:41:05

多谢小甲鱼老师的指点
原来是**是从右往左结合的太神奇了

龙sir 发表于 2016-6-27 10:12:09

又学到一手,**从右向左计算

无符号整形 发表于 2016-6-27 21:00:51

原来是从右向左的怪不得

四十二 发表于 2016-6-28 10:09:23

学到了学到了哎**是从右向左结合的,这个知识虽然感觉有点冷不过说不定有的时候又很有用……

哪吒三太子 发表于 2016-7-2 13:41:17

加个括号试试

还是鱼头好 发表于 2017-11-4 10:56:20

小甲鱼 发表于 2016-6-14 12:06
然而我感觉你应该是问题写错了,你应该是要问:

为何 2 ** 2 ** 32 会崩溃,然而 (2 ** 2) * ...

原来如此!TVT 找到正确答案了,感谢!0v0

JK藌桃臀尐柹秭 发表于 2020-6-8 17:12:20

小甲鱼 发表于 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]
查看完整版本: 第6节课后习题有一个让计算机崩溃的小代码 2**2**3