加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 09:33:05 所属栏目:百科 来源:网络整理
导读:以下是在C中将unsigned int转换为int的有效且无问题的方法: #include limits.hvoid safeConvert(unsigned int passed) { int variable = static_castint(passed % (INT_MAX+1)); ...} 或者,还有更好的方法? UPDATE 正如James McNellis所指出的那样,未指定
以下是在C中将unsigned int转换为int的有效且无问题的方法:

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

或者,还有更好的方法?

UPDATE

正如James McNellis所指出的那样,未指定无符号整数> INT_MAX为整数 – 而不是实现定义.因此,此处的上下文现在特别针对我的偏好,即当unsigned int超过INT_MAX时,确保此整数重置为零.

原始背景

我有一些unsigned int用作计数器,但是想要在特定情况下将它们作为整数传递.

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

解决方法

这应该也有效:

int variable = passed & INT_MAX;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读