Gle*_*n T 3 c++ overflow integer-overflow visual-c++
以下是在C++中将unsigned int转换为int的有效且无问题的方法:
#include <limits.h>
void safeConvert(unsigned int passed)
{
int variable = static_cast<int>(passed % (INT_MAX+1));
...
}
Run Code Online (Sandbox Code Playgroud)
或者,还有更好的方法?
UPDATE
正如James McNellis指出的那样,将unsigned int> INT_MAX分配给一个整数并不是未定义的 - 而是实现定义的.因此,此处的上下文现在特别针对我的偏好,即当unsigned int超过INT_MAX时,确保此整数重置为零.
原始背景
我有一些unsigned int用作计数器,但是想要在特定情况下将它们作为整数传递.
在正常操作下,这些计数将保持在INT_MAX的范围内.但是为避免遇到未定义的实现特定行为,如果发生异常(但有效)的情况,我想在这里进行一些有效的转换.
这应该也有效:
int variable = passed & INT_MAX;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1125 次 |
| 最近记录: |