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
?
a) Pouvez-vous m'expliquer la différence entre
int64_t
etlong
(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 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 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.
int64_t
est typedef
vous pouvez le trouver dans <stdint.h>
en C
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.