Cast de size_t

Cast de size_t

by Sophie Sarah Ammann -
Number of replies: 1

Bonjour, 

Je me demandais pourquoi lorsqu'on écrit 

printf("%ld", (size_t) -1);

ceci affiche -1. 

Cela veut dire qu'en mettant un nombre négatif dans un size_t il ne sera pas automatiquement casté en unsigned long ? En particulier -1 qui s'écrit 11111111111... en complément à 2 , devrait être casté en la valeur maximum représentable sur size_t puisque le bit de poids fort n'est plus signé. 

Lorsque je run gdb, et print la valeur (size_t) -1, ça affiche : 18446744073709551615. 



In reply to Sophie Sarah Ammann

Re: Cast de size_t

by Deleted user -
Bonjour,

Dans le descripteur de format "%ld", le
l est pour long et d pour entier signé. Il est donc normal qu'une valeur négative - -1 en l'occurrence - soit affichée peu importe votre cast. Si vous voulez afficher un size_t sur la sortie standard, il vous faut utiliser le descripteur de format "%zu" [1].

[1] http://www.cplusplus.com/reference/cstdio/printf/