Как избежать целочисленного переполнения?

В следующем коде C++, 32767 + 1 =-32768.

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

Там какой-либо путь состоит в том, чтобы просто оставить "var" как 32 767 без ошибок?

7
задан Josh Crozier 8 December 2013 в 04:52
поделиться

3 ответа

Да, есть:

if (var < 32767) var++;

Кстати, не стоит жестко кодировать константу, используйте numeric_limits::max(), определенный в заголовочном файле.

Вы можете заключить эту функциональность в шаблон функции:

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

и использовать ее как:

short var = 32767;
increment_without_wraparound(var); // pick a shorter name!
30
ответ дан 6 December 2019 в 06:13
поделиться

используйте 'unsigned short int' или 'long int'

#include <iostream>
int main(){
long int var = 32767;
var++;
std::cout << var;
std::cin.get();
}
-1
ответ дан 6 December 2019 в 06:13
поделиться
#include <iostream> 
int main(){ 
unsigned short var = 32767; 
var++; 
std::cout << var; 
std::cin.get(); 
} 
0
ответ дан 6 December 2019 в 06:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: