Définition de int64 t
je suis novice en c/" class="blnk">C/C++, j'ai donc quelques questions sur un type de base:
a) Pouvez-vous m'expliquer la différence entre int64_t
et long
( long int
)?
D'après ce que j'ai compris, les deux sont des entiers de 64 bits. Est-il une raison de choisir l'un plutôt que l'autre?
b) j'ai essayé de chercher la définition de int64_t
sur le web, sans grand succès. Y a-t-il une source autorisée que je dois consulter pour de telles questions?
C) pour le code utilisant int64_t
pour compiler, je suis en train d'inclure <iostream>
, ce qui n'a pas beaucoup de sens pour moi. Y a-t-il d'autres inclusions qui fournissent une déclaration de int64_t
?
4 réponses
a) Pouvez-vous m'expliquer la différence entre
int64_t
etlong
(long int
)? D'après ce que j'ai compris, les deux sont des entiers de 64 bits. Est-il une raison de choisir l'un plutôt que l'autre?
le premier est un type entier signé avec exactement 64 bits. Ce dernier est un type entier signé avec au moins 32 bits.
b) I essayé de chercher la définition de
int64_t
sur le web, sans grand succès. Y a-t-il une source autorisée que je dois consulter pour de telles questions?
http://cppreference.com couvre ceci ici: http://en.cppreference.com/w/cpp/types/integer . La source faisant autorité, cependant, est le C++ standard (ce bit particulier peut être trouvé dans §18.4 Integer types [cstdint]).
C) pour le code utilisant
int64_t
pour compiler, j'inclus<iostream>
, ce qui n'a pas beaucoup de sens pour moi. Y a-t-il d'autres inclusions qui fournissent une déclaration deint64_t
?
il est déclaré dans <cstdint>
ou <cinttypes>
(sous l'espace de noms std
), ou dans <stdint.h>
ou <inttypes.h>
(dans l'espace de noms global).
int64_t
est garanti par la norme C99 pour être exactement 64 bits de large sur les plateformes qui l'implémentent, il n'y a pas de telle garantie pour un long
qui est au moins 32 bits donc il pourrait être plus.
§7.18.1.3 Exacte de la largeur des types d'entiers 1 typedef nom intN_t désigne un type entier signé avec la largeur N, pas de bits de remplissage, et une représentation en complément à deux. Ainsi, int8_t indique un entier type avec une largeur d'exactement 8 bits.
int64_t
est typedef
, vous pouvez trouver que dans <stdint.h>
C
un int64_t doit avoir 64 bits de large sur n'importe quelle plate-forme (d'où le nom), alors qu'un long peut avoir différentes longueurs sur différentes plates-formes. En particulier, sizeof (long) est souvent 4, c'est-à-dire. 32 bits.