Dans le code C ++ suivant, 32767 + 1 = -32768.
#include <iostream> int main(){ short var = 32767; var++; std::cout << var; std::cin.get(); }
3 Réponses :
Oui, il y a:
short var = 32767; increment_without_wraparound(var); // pick a shorter name!
#include <iostream> int main(){ unsigned short var = 32767; var++; std::cout << var; std::cin.get(); }
Cela répond à la question qui a été posée, mais pas, je soupçonne que la question qui était destinée.
Utilisez 'Int Int Int Int' ou 'Long Int'
#include <iostream> int main(){ long int var = 32767; var++; std::cout << var; std::cin.get(); }
Puis x = 32676; x ++ entraînera X == 32677, pas 32676.
OK, alors comment évitez-vous le débordement sur un entier non signé 64 bits?
Obtenez-vous ce qui se passe ici? Vous avez frappé le plafond pour un entier (court), l'ajout d'un autre retourne les panneaux à la quantité négative maximale pour un entier.
Si vous voulez un mode différent où les entiers n'enveloppent pas automatiquement, il n'existe pas, désolé.
Cela me rappelle pourquoi je ne peut pas dormir . :-)
Ceci s'appelle Saturation Arithmétique . Cela peut être très illogique, alors soyez averti. Qu'est-ce que 32767 + 1-1?