c++ - 在 C++ 中将 unsigned int 转换为 int 时避免整数溢出的有效方法是什么?

标签 c++ visual-c++ overflow integer-overflow

以下是在 C++ 中将 unsigned int 转换为 int 的有效且无问题的方法吗:

#include <limits.h>
void safeConvert(unsigned int passed) 
{
    int variable = static_cast<int>(passed % (INT_MAX+1)); 
    ...
}

或者有更好的方法吗?

更新

正如 James McNellis 所指出的,将 unsigned int > INT_MAX 赋值给整数并不是未定义的——而是实现定义的。因此,这里的上下文现在特别符合我的偏好,以确保当 unsigned int 超过 INT_MAX 时该整数重置为零。

原始上下文

我有许多无符号整数用作计数器,但在特定情况下想将它们作为整数传递。

在正常操作下,这些计数将保持在 INT_MAX 的范围内。但是,为了避免在异常(但有效)情况发生时遇到 undefined 实现特定行为,我想在这里进行一些有效的转换。

最佳答案

这也应该有效:

int variable = passed & INT_MAX;

关于c++ - 在 C++ 中将 unsigned int 转换为 int 时避免整数溢出的有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5162858/

相关文章:

c++ - VC++ 中的 Windows 7 按钮样式

c++ - VC++的开端

java - 运行 JavaCpp 示例时出现 UnsatisfiedLinkException (LegacyLibrary)

c++ - 用短路操作替换链式 ifs

c++ - 如何在最小化每秒更新影响的同时存储和推送模拟状态?

c++ - 将参数传递给串联函数

.net - C++中的 “^”符号是什么?

html - 如何在不切断内容的情况下垂直居中元素并处理溢出

c++ - C/C++ 中两个 INT_MAX 数字的乘积不正确

html - 超出窗口宽度的溢出背景