Comment afficher la valeur maximale d'un long non signé en C?
Ce que je fais mal?
$ cat size.c
#include<stdio.h>
#include<math.h>
int main() {
printf ("sizeof unsigned int = %d bytes.\n", sizeof(unsigned int));
printf ("sizeof unsigned long long = %d bytes.\n", sizeof(unsigned long long));
printf ("max unsigned int = %d\n", (int)(pow(2, 32) - 1));
printf ("max unsigned long long = %lld\n", (unsigned long long)(pow(2, 64) - 1));
}
$ gcc size.c -o size
$ ./size
sizeof unsigned int = 4 bytes.
sizeof unsigned long long = 8 bytes.
max unsigned int = 2147483647
max unsigned long long = -1
$
Je suis dans l'attente d' 18446744073709551615
en sortie au lieu d'une -1
à la dernière ligne.
Bon, je l'ai complètement oubliée que j'avais la mauvaise valeur pour la 232 - 1, ce qui devrait avoir été 4294967295, pas de 2 147 483 647. Les choses prennent plus de sens maintenant.
source d'informationauteur Lazer
Vous devez vous connecter pour publier un commentaire.
Utilisation
%llu
pas%lld
.d
est pour les entiers signés, doncprintf
affiche comme un signé de longue de longue.Il suffit de ne pas supposer qu'elle a une certaine valeur d'utilisation
ULLONG_MAX
cela fonctionne en C++, devraient travailler ici, trop.
Edit: changé ~0 (type) -1 comme par Christoph suggestion. Voir les commentaires ci-dessous.
Vous pouvez obtenir la valeur maximale d'un type non signé procédant de la manière suivante:
Plus facile, droit? =). Deuxièmement, vous dites
printf()
pour interpréter la variable donnée comme un long décimale, qui est signé. Essayez plutôt ceci:%llu
signifie "long long unsigned".Celui qui fait -1 à Kiril Kirov post pls prendre un coup d'oeil ici:
Est-il sécuritaire d'utiliser -1 pour définir tous les bits à vrai?
Dingo post
Dans Kiril post seulement de légères modifications nécessaires en ce qui concerne l'extension du signe:
-1 est antipattern, il va faire le travail si tu ne veux pas aller avec la solution fournie par lmits.h