以下是在 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/