Multiplication de deux entiers en C++

J'ai plutôt une question de base, mais je ne suis pas sûr si je comprends le concept ou pas. Supposons que l'on ait:

int a = 1000000;
int b = 1000000;
long long c = a * b;

Lorsque je l'exécute, c montre la valeur est négative, alors j'ai changé aussi a et b à long long et puis tout s'était bien passé. Alors, pourquoi dois-je changer de a et b, lorsque leurs valeurs sont dans la gamme de int et leur produit est affecté à c (qui est long long)?

Je suis à l'aide de C/C++

  • Les services de renseignements ne sont pas promus à long avant de multiplication, ils restent entiers et le produit ainsi. Ensuite, le produit est jeté à long long, mais trop tard, le débordement a frappé. Avoir un de a ou b long devrait fonctionner aussi bien, que les autres seraient encouragées.
  • Vous devriez tag de la programmation de la langue à l'aide de causer des langues différentes peuvent présenter des comportements différents 😉
  • En fonction de la machine et la version de C vous êtes à l'aide de la taille d'un int peut changer.
  • vous devriez faire tous les officiels et des trucs et copier/coller dans une réponse plutôt qu'il s'encanailler comme un commentaire. 🙂
  • pourquoi pas ?:-)
  • long long c = ((long long)a*(long long)b);
  • long long c=(long long)a*b
  • D'habitude, je préfère ne pas ajouter des balises dans les titres, mais c'est discutable
  • C'est une réplique de l'une de mes premières questions stackoverflow.com/questions/29579112/...

InformationsquelleAutor essa | 2015-07-27