9

在以下 C++ 代码中,32767 + 1 = -32768。

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

有什么方法可以将“var”保留为 32767,而不会出现错误?

4

3 回答 3

31

就在这里:

if (var < 32767) var++;

顺便说一句,您不应该对常量进行硬编码,而是使用在头文件numeric_limits<short>::max()中定义。<limits>

您可以将此功能封装在函数模板中:

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!
于 2010-06-14T23:44:22.533 回答
0
#include <iostream> 
int main(){ 
unsigned short var = 32767; 
var++; 
std::cout << var; 
std::cin.get(); 
} 
于 2010-06-14T23:47:20.853 回答
-1

使用“无符号短整数”或“长整数”

#include <iostream>
int main(){
long int var = 32767;
var++;
std::cout << var;
std::cin.get();
}
于 2010-06-14T23:53:50.763 回答