Pregunta ¿Cómo evitar el desbordamiento de enteros?


En el siguiente código de C ++, 32767 + 1 = -32768.

#include <iostream>
int main(){
short var = 32767;
var++;
std::cout << var;
std::cin.get();
}

¿Hay alguna manera de simplemente dejar "var" como 32767, sin errores?


6
2018-06-14 23:43


origen


Respuestas:


Sí hay:

if (var < 32767) var++;

Por cierto, no debes codificar la constante, usa numeric_limits<short>::max() definido en <limits> archivo de encabezado en su lugar.

Puede encapsular esta funcionalidad en una plantilla de función:

template <class T>
void increment_without_wraparound(T& value) {
   if (value < numeric_limits<T>::max())
     value++;
}

y úsalo como:

short var = 32767;
increment_without_wraparound(var); // pick a shorter name!

30
2018-06-14 23:44



#include <iostream> 
int main(){ 
unsigned short var = 32767; 
var++; 
std::cout << var; 
std::cin.get(); 
} 

0
2018-06-14 23:47



use 'unsigned short int' o 'long int'

#include <iostream>
int main(){
long int var = 32767;
var++;
std::cout << var;
std::cin.get();
}

0
2018-06-14 23:53