如何避免整数溢出?

发布于 2024-09-06 07:22:34 字数 207 浏览 8 评论 0原文

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

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

有没有办法让“var”保留为32767,而不会出现错误?

In the following C++ code, 32767 + 1 = -32768.

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

Is there any way to just leave "var" as 32767, without errors?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

小霸王臭丫头 2024-09-13 07:22:34

是的,有:

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!

Yes, there is:

if (var < 32767) var++;

By the way, you shouldn't hardcode the constant, use numeric_limits<short>::max() defined in <limits> header file instead.

You can encapsulate this functionality in a function template:

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

and use it like:

short var = 32767;
increment_without_wraparound(var); // pick a shorter name!
猫弦 2024-09-13 07:22:34
#include <iostream> 
int main(){ 
unsigned short var = 32767; 
var++; 
std::cout << var; 
std::cin.get(); 
} 
#include <iostream> 
int main(){ 
unsigned short var = 32767; 
var++; 
std::cout << var; 
std::cin.get(); 
} 
假扮的天使 2024-09-13 07:22:34

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

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

use 'unsigned short int' or 'long int'

#include <iostream>
int main(){
long int var = 32767;
var++;
std::cout << var;
std::cin.get();
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文