Question

Je me suis ennuyé et jouer avec la console ipython et suis tombé sur le comportement suivant, je ne comprends pas vraiment

In [1]: 2**2
Out[1]: 4

In [2]: 2**2**2
Out[2]: 16

In [3]: 2**2**2**2
Out[3]: 65536

In [4]: 2**2**2**2**2 

La réponse à [4] est pas 4294967296L, il est un très long, mais je ne peux pas vraiment comprendre pourquoi.

Le numéro se trouve ici: http://pastie.org/475714

(Ubuntu 8.10, python 2.5.2, 0.8.4 ipython)
(Mac OS X 10.5.6, Python 2.5.1)

Était-ce utile?

La solution

Python va droite à gauche sur l'opération de puissance mathématique. Par exemple, IN [2] fait:

2 ** (4) = 16

IN [3] = 2 2 2 2 = 2 2 ** (4) = 2 ** 16 = 65536

Vous auriez besoin entre parenthèses si vous voulez calculer de gauche à droite. La raison OUT [4] n'est pas sortie la réponse que vous voulez est parce que le nombre est astronomique et Python ne peut pas imprimer.

2 ^ 65536 = extrêmement énorme

Autres conseils

La priorité de l'opérateur ** fait l'évaluation va de droite à gauche (au lieu de l'attendre de gauche à droite). En d'autres termes:

2**2**2**2 == (2**(2**(2**2)))

En effet, l'ordre de priorité en Python provoque cette équation à évaluer de droite à gauche.

>>> 2**2
4
>>> 2**2**2
16
>>> 2**(2**2)
16
>>> 2**2**2**2
65536
>>> 2**2**(2**2)
65536
>>> 2**(2**(2**2))
65536
>>> 2**2**2**2**2
57896044618658097711785492504343953926634992332820282019728792003956564819968L
>>> 2**2**2**(2**2)
57896044618658097711785492504343953926634992332820282019728792003956564819968L
>>> 2**2**(2**(2**2))
57896044618658097711785492504343953926634992332820282019728792003956564819968L
>>> 2**(2**(2**(2**2)))
57896044618658097711785492504343953926634992332820282019728792003956564819968L
>>> 2**255
57896044618658097711785492504343953926634992332820282019728792003956564819968L

Comme les autres réponses déjà dit, il est parce que est évaluée de ** droite à gauche. Voici le , où toutes les préséances sont décrits.

L'évaluation de droite à gauche, regardons les étapes Python va à travers pour obtenir ces réponses:

2**2
4

2**(2**2)
2**(4)
16

2**(2**(2**2))
2**(2**(4))
2**(16)
65536

2**(2**(2**(2**2)))
2**(2**(2**(4)))
2**(2**(16))
2**(65536)
2.0035299304068464649790723515603e+19728
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top