pris en charge par GCC:GCC prend-il en charge les longs longs int?
long long int
qui serait un entier de 64 bits?
De même, est-ce que long long int
fait partie de la norme?
pris en charge par GCC:GCC prend-il en charge les longs longs int?
long long int
qui serait un entier de 64 bits?
De même, est-ce que long long int
fait partie de la norme?
Oui GCC prend en charge long long int
, qui fait partie de la norme C99.
La norme ne précise pas sa taille en bits, mais nécessaire valeurs de LLONG_MIN
et LLONG_MAX
en <limits.h>
implique qu'il est au moins 64 bits (exactes types larges entier de 64 bits sont int64_t
/uint64_t
de <stdint.h>
).
LLONG_MIN
doit y avoir au plus -9223372036854775807
LLONG_MAX
doit être d'au moins 9223372036854775807
long long int
est une partie de la norme C99, et je sais que GCC la prend en charge. And now I can prove it.
Je crois que généralement un unsigned long long
est la représentation traditionnelle d'un entier de 64 bits. Je suppose que long long int
fonctionnerait aussi, mais je n'ai jamais personnellement vu des vars 64 bits déclarés comme ça avant.
'long long int' est juste un entier signé de 64 bits (ou plus). Rien de particulièrement inhabituel à ce sujet. – bdonlan
Sur ma machine 32 bits,
int main()
{
printf("%d\n", sizeof(long long int));
return 0;
}
compilé avec gcc
8 gravures (8 octets * 8 bits/octets = 64 bits).
Les chaînes au format 'size_t' doivent utiliser' "% zu" 'et non' "% d" '(de même,' ssize_t' doit utiliser '"% zd "'). C'est un problème sur les plates-formes 64 bits, où size_t est souvent un type 64 bits, alors que int peut toujours être 32 bits. – bdonlan
sizeof (char) == 1 par définition, mais cela peut être> = un octet. Les types 64 bits sont donc autorisés à avoir sizef (t) == 1. –
Oui, long long
fait partie de C99, ainsi que les constantes long long
(10222333444555LL
) et quelques éléments de support. (LLONG_MAX
, llrint(d)
, llround(d)
, quelques autres.) Et gcc l'a implémenté depuis un certain temps maintenant.
Afin d'imprimer de longues variables longues int:
long long int lli = 100000000;
printf("%lld\n", lli);
long long sont bien soutenus et ont été depuis très longtemps [désolé]. Si je comprends bien, cela aurait dû être 128 bits sur les plates-formes 64 bits, mais pour des raisons de compatibilité/de portabilité dans GCC, a normalisé sur une largeur de 64 bits.
Voir aussi: (u) int128_t, et ce discussion on GCC's 128-bit integer support
"Cela aurait dû être 128 bits sur les plates-formes 64 bits": attention à soutenir cette affirmation de quelque façon que ce soit? –
J'ai dit, "si je comprends bien". Je ne peux soutenir l'idée que dans ce sens, comme le dit wikipedia: "Le terme" mot "est utilisé pour un petit groupe de bits qui sont traités simultanément par les processeurs d'une architecture particulière. Donc, logiquement, un mot long et long serait plus long sur un arc plus large. Cependant, à partir de la même page wikipedia, la norme de facto semble être que long long est de 64 bits. http://en.wikipedia.org/wiki/Integer_%28computer_science%29 –
Merci tout le monde, je ne l'ai jamais joué avec 64 bits de données avant et je suis terrifié ce soir paresseux. – Polaris878
Notez que dans un environnement C99, vous devriez utiliser 'int64_t' dans' 'pour un entier portable de 64 bits. Si vous n'êtes pas dans un environnement C99, "long long" est votre meilleur pari, mais il n'est pas vraiment garanti d'avoir une largeur de 64 bits. –
ST: Eh bien, il est * garanti * d'être * au moins * 64-bits de large, donc il ne devrait pas s'inquiéter que quelque part là-bas c'est <64. Pas dans une implémentation conforme, de toute façon. – DigitalRoss