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 ?

56
demandé sur clstaudt 2012-11-28 15:35:13

4 réponses

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?

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 de int64_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).

74
répondu R. Martinho Fernandes 2017-05-23 12:02:23

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.

7
répondu iabdalkader 2012-11-28 11:44:30

int64_t est typedef , vous pouvez trouver que dans <stdint.h> C

4
répondu Omkant 2012-11-28 11:53:29

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.

1
répondu Kylotan 2012-11-28 11:37:59