web-dev-qa-db-fra.com

Quelle est la différence entre long long et long

Quelle est la différence entre long long et long? Et les deux ne fonctionnent pas avec des nombres à 12 chiffres (600851475143), est-ce que j'oublie quelque chose?

#include <iostream>
using namespace std;

int main(){
  long long a = 600851475143;
}
22
Hikari Iwasaki

Sur les principales plates-formes 32 bits:

  • int est 32 bits
  • long vaut également 32 bits
  • long long est 64 bits

Sur les principales plates-formes 64 bits:

  • int est 32 bits
  • long est 32 ou 64 bits
  • long long a également 64 bits

Aller à la norme:

  • int doit être au moins 16 bits
  • long doit être au moins 32 bits
  • long long doit avoir au moins 64 bits

Corrige moi si je me trompe.

Si vous avez besoin d'une taille entière spécifique pour une application particulière, plutôt que de laisser le compilateur choisir la taille souhaitée, #include <stdint.h> (ou <cstdint>) afin que vous puissiez utiliser ces types:

  • int8_t et uint8_t
  • int16_t et uint16_t
  • int32_t et uint32_t
  • int64_t et uint64_t

#include <stddef.h> (ou <cstddef>) pourrait également vous intéresser:

  • size_t
  • ptrdiff_t
42
Joey Adams

long long n'existe pas en C++ 98/C++ 03, mais existe en C99 et c ++ 0x.

long est garanti au moins 32 bits.

long long est garanti au moins 64 bits.

7

Pour élaborer sur le commentaire de @ ildjarn:

Et les deux ne fonctionnent pas avec des nombres à 12 chiffres (600851475143), est-ce que j'oublie quelque chose?

Le compilateur examine la valeur littérale 600851475143 sans considérer la variable à laquelle vous l'attribuez/l'initialisant. Vous l'avez écrit en tant que littéral int et il ne rentre pas dans un int.

Utilisez 600851475143LL pour obtenir un littéral typé long long.

2
Karl Knechtel

Dépend de votre compilateur. Long est de 64 bits et doit gérer 12 chiffres.

0
msathia

Votre compilateur C++ prend en charge long long, la norme C99 garantissant au moins 64 bits (c’est une norme C, pas une norme C++). Consultez le fichier d'en-tête Visual C++ pour obtenir les plages sur votre système.

Recommandation

Pour les nouveaux programmes, il est recommandé de n'utiliser que bool, char, int et double, jusqu'à ce que l'un des autres types soit nécessaire.

http://www.somacon.com/p111.php

0
Craig White