2012-12-13 5 views
1

OK, je suis en train d'imprimer la version décimale/hexadécimale d'un relativement grand unsigned long long et les résultats que je suis en train sont tout à fait bizarre ...Unsigned Long Long - Sortie bizarre

Le code:

unsigned long long a = 1llu<<63; 

printf("decimal = %llu\n",a); 
printf("hexadecimal = %llx\n",a); 

La sortie:

decimal = 9223372036854775808 
hexadecimal = 8000000000000000 

Maintenant, voici ce que:

  • La sortie hexadécimal est correcte.
  • La sortie décimale est pas (devrait être 9223372036854780000)

Pourquoi ça se passe? Qu'est-ce que je fais mal???

+0

2^63 est ce qu'il imprime. Je ne vois pas de problème ici. – chris

+0

Copie possible? Intéressant cependant: http://stackoverflow.com/questions/2844/how-do-you-printf-an-unsigned-long-long-int – abelito

+0

@chris Vraiment ??? Je ne pense pas qu'il correspond même à un nombre entier de 64 bits, n'est-ce pas? Et si oui, pourquoi? –

Répondre

8

Puisque cinq n'est pas un facteur de puissance de deux, aucune puissance de deux extrémités à zéro. Votre autre source qui a donné 9223372036854780000 est incorrecte.

+1

Mon autre source est la calculatrice du programmeur de Mac OS X. Mais, oui, votre point de vue mathématique a vraiment du sens. –

+1

@ Dr.Kameleon Punching "1 << 63" donne un nombre se terminant par 808. En utilisant le bouton 2^x de la calculatrice scientifique pour 2^63, passer en mode programmeur donne 9 223 372 036 854 776 000. Je ne sais pas exactement ce que vous avez fait. – Potatoswatter

+0

Je suis vraiment confus. Juste commuté à la vue 'Programmer'. '1'' X << Y' '63'. Et il sort toujours la mauvaise valeur. - La chose est l'affichage binaire (sous la boîte de calculatrice principale) montre le nombre comme il se doit. –

Questions connexes