首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unsigned Int溢出

Unsigned Int溢出
EN

Stack Overflow用户
提问于 2012-02-08 21:06:16
回答 3查看 20.7K关注 0票数 19

当我溢出unsigned int时,它将包含什么?具体地说,我想用两个unsigned int做一个乘法:乘法完成后,unsigned int中会有什么?

代码语言:javascript
复制
unsigned int someint = 253473829*13482018273;
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-08 21:14:35

unsigned数不能溢出,而是使用模数的属性进行环绕。

例如,当unsigned int是32位时,结果将是:(a * b) mod 2^32

正如CharlesBailey所指出的,253473829*13482018273在转换之前可能会使用带符号乘法,因此您应该在乘法之前显式地了解unsigned

代码语言:javascript
复制
unsigned int someint = 253473829U * 13482018273U;
票数 26
EN

Stack Overflow用户

发布于 2012-02-08 21:17:10

无符号整数溢出与有符号整数溢出不同,它表现出定义明确的行为。

值基本上是“环绕”的。它是安全的,通常用于倒计时,或散列/mod函数。

票数 7
EN

Stack Overflow用户

发布于 2012-02-08 21:22:30

这可能在一定程度上取决于您的编译器。几年前我遇到过这样的错误,有时你会得到运行时错误,其他时候,它会“包裹”回一个非常小的数字,这将导致砍掉最高电平的位,并留下余数,也就是说,如果它是一个32位的无符号整数,而你的乘法结果是一个34位的数字,它会砍掉高位的2位,给你余数。您可能必须在您的编译器上尝试它,以查看您得到的确切结果,这可能与使用不同的编译器得到的结果不同,特别是如果溢出发生在表达式的中间,其中最终结果在无符号int的范围内。

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9193880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档