Représentant un entier de 64 bits dans GNU/Linux
J'utilise Ubuntu 10.10 (64 bits) avec gcc
et je voulais utiliser un entier de 64 bits dans mon programme en C++.
Sur mon système, les sorties de sizeof(long)
, sizeof(long long int)
et sizeof(int64_t)
sont toutes les 8 octets (64 bits).
Qui qualificatif (long
, long long
, ou int64_t
) recommanderiez-vous pour utiliser les entiers 64 bits?
OriginalL'auteur smilingbuddha | 2011-12-04
Vous devez vous connecter pour publier un commentaire.
int64_t
-- C'est parce qu'il est le plus portable de la représentation. Les deux autres pourraient être représentées différemment sur d'autres machines.OriginalL'auteur Anthony Blake
int64_t. Si vous avez besoin de 64 bits, le déclarer explicitement. La taille de long et long long varie selon la machine.
OriginalL'auteur Lalaland
Avez-vous besoin exactement 64 bits ou 64 bits?
Utilise celui de
int64_t
,int_least64_t
, ouint_fast64_t
la plupart exprime clairement votre intention. (Tous les trois sont à peu près certain d'être du même type sur les systèmes actuels, mais de documenter votre intention est précieux.)Toutes les implémentations doivent fournir
int_least64_t
etint_fast64_t
. C'est au moins théoriquement possible queint64_t
peut ne pas exister (par exemple, si le compilateur a 128 bits type, mais pas de 64 bits type, ou si les entiers signés ne sont pas représentés à l'aide de 2-complément).(Mais dans tous les C99-ish mise en œuvre que j'ai jamais vu,
long long
est exactement 64 bits, etint64_t
existe.)OriginalL'auteur Keith Thompson
Définir un type entier 64 bits et à utiliser dans votre code. Utiliser la directive #ifdef pour le compilateur ne peut pas choisir la bonne. L'exemple pour l'unification de certaines entiers:
Cet en-tête peut provoquer ce problème : stackoverflow.com/questions/49614169/...
OriginalL'auteur vpp