web-dev-qa-db-fra.com

Définition de int64_t

Je suis nouveau en C/C++, alors j'ai quelques questions sur un type de base:

a) Pouvez-vous m'expliquer la différence entre int64_t et long (long int)? À ma connaissance, les deux sont des entiers 64 bits. Y a-t-il une raison de choisir l'un par rapport à l'autre?

b) J'ai essayé de chercher la définition de int64_t sur le Web, sans grand succès. Existe-t-il une source faisant autorité que je dois consulter pour de telles questions?

c) Pour le code utilisant int64_t à compiler, j’inclus actuellement <iostream>, ce qui n'a pas beaucoup de sens pour moi. Existe-t-il d'autres inclus qui fournissent une déclaration de int64_t?

62
clstaudt

a) Pouvez-vous m'expliquer la différence entre int64_t et long (long int)? À ma connaissance, les deux sont des entiers 64 bits. Y a-t-il une raison de choisir l'un par rapport à 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) J'ai essayé de chercher la définition de int64_t sur le Web, sans grand succès. Existe-t-il une source faisant autorité que je dois consulter pour de telles questions?

http://cppreference.com couvre ceci ici: http://en.cppreference.com/w/cpp/types/integer . Cependant, la source faisant autorité est norme C++ (ce bit particulier se trouve au § 18.4 Types entiers [cstdint]).

c) Pour le code utilisant int64_t pour compiler, j'inclus <iostream>, ce qui n'a pas beaucoup de sens pour moi. Existe-t-il d'autres inclus 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).

83

int64_t _ est garanti par la norme C99 comme étant exactement 64 bits de large sur les plates-formes qui l'implémentent, il n'y a aucune telle garantie pour un long qui fait au moins 32 bits, donc il pourrait en être plus .

§7.18.1.3 Types d’entiers de largeur exacte 1 Le nom typedef intN_t désigne un type d’entier signé de largeur N, sans bits de remplissage et une représentation en complément à deux. Ainsi, int8_t désigne un type entier signé avec une largeur d’exactement 8 bits.

8
iabdalkader

int64_t est typedef vous pouvez le trouver dans <stdint.h> en C

4
Omkant

Un int64_t doit avoir une largeur de 64 bits sur toute plate-forme (d'où son 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.

2
Kylotan