Quelle est la différence entre long long et long? Et les deux ne fonctionnent pas avec des nombres à 12 chiffres (600851475143), est-ce que j'oublie quelque chose?
#include <iostream>
using namespace std;
int main(){
long long a = 600851475143;
}
Sur les principales plates-formes 32 bits:
int
est 32 bitslong
vaut également 32 bitslong long
est 64 bitsSur les principales plates-formes 64 bits:
int
est 32 bitslong
est 32 ou 64 bitslong long
a également 64 bitsAller à la norme:
int
doit être au moins 16 bitslong
doit être au moins 32 bitslong long
doit avoir au moins 64 bitsCorrige moi si je me trompe.
Si vous avez besoin d'une taille entière spécifique pour une application particulière, plutôt que de laisser le compilateur choisir la taille souhaitée, #include <stdint.h>
(ou <cstdint>
) afin que vous puissiez utiliser ces types:
int8_t
et uint8_t
int16_t
et uint16_t
int32_t
et uint32_t
int64_t
et uint64_t
#include <stddef.h>
(ou <cstddef>
) pourrait également vous intéresser:
size_t
ptrdiff_t
long long
n'existe pas en C++ 98/C++ 03, mais existe en C99 et c ++ 0x.
long
est garanti au moins 32 bits.
long long
est garanti au moins 64 bits.
Pour élaborer sur le commentaire de @ ildjarn:
Et les deux ne fonctionnent pas avec des nombres à 12 chiffres (600851475143), est-ce que j'oublie quelque chose?
Le compilateur examine la valeur littérale 600851475143
sans considérer la variable à laquelle vous l'attribuez/l'initialisant. Vous l'avez écrit en tant que littéral int
et il ne rentre pas dans un int
.
Utilisez 600851475143LL
pour obtenir un littéral typé long long
.
Dépend de votre compilateur. Long est de 64 bits et doit gérer 12 chiffres.
Votre compilateur C++ prend en charge long long, la norme C99 garantissant au moins 64 bits (c’est une norme C, pas une norme C++). Consultez le fichier d'en-tête Visual C++ pour obtenir les plages sur votre système.
Recommandation
Pour les nouveaux programmes, il est recommandé de n'utiliser que bool, char, int et double, jusqu'à ce que l'un des autres types soit nécessaire.