Manipuler des entiers en 64 bits

Décembre 2016


Manipuler des entiers en 64 bits


En C, un entier traditionnel non signé sur 32 bits ne peut pas dépasser la valeur de 4 294 967 295.
Il se peut que vous soyiez amenés à manipuler des nombres plus grands et pour celà vous aurez besoin des
entiers codés sur 64 bits. Toutefois, ce type ne se manipule pas toujours de la même façon qu'un entier ordinaire. En effet, les constantes entières et l'affichage de ces nombres ne sont pas définis de la même façon.

Entiers 64 bits non signés


Type: unsigned long long
Formatage pour l'affichage: %llu
Suffixe pour définir une constante: ULL

Exemple:
//Affecte la valeur 4294967296 dans a
unsigned long long a = 4294967296ULL;
//Affiche cette valeur
printf("%llu", a);

Entiers 64 bits signés


Type: long long
Formatage pour l'affichage: %lld
Suffixe pour définir une constante: LL

Exemple:
//Affecte la valeur 4294967296 dans a
long long a = 4294967296LL;
//Affiche cette valeur
printf("%lld", a);

Pourquoi un suffixe bizzare pour définir une valeur constante?


Si vous essayez ceci par exemple:
unsigned long long a = 4294967296

Votre compilateur vous répondra que ce nombre est trop large pour le type "long". C'est à dire un entier sur 32 bits. Les constantes ont ce type par défaut. Au final, cette notion est directement liée à l'architecture des processeurs 32 bits. Un registre 32 bits de processeur est limité et votre compilateur essaiera par défaut de caser les nombres dans un seul registre. Mais avec un suffixe comme LL et ULL, votre compilateur stockera votre nombre sur 2 registres, c'est à dire sur 64 bits, ce qui laisse une capacité beaucoup plus grande.

A voir également :

Ce document intitulé «  Manipuler des entiers en 64 bits  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.