当我溢出unsigned int时,它将包含什么?具体地说,我想用两个unsigned int做一个乘法:乘法完成后,unsigned int中会有什么?
unsigned int someint = 253473829*13482018273;发布于 2012-02-08 21:14:35
unsigned数不能溢出,而是使用模数的属性进行环绕。
例如,当unsigned int是32位时,结果将是:(a * b) mod 2^32。
正如CharlesBailey所指出的,253473829*13482018273在转换之前可能会使用带符号乘法,因此您应该在乘法之前显式地了解unsigned:
unsigned int someint = 253473829U * 13482018273U;发布于 2012-02-08 21:17:10
无符号整数溢出与有符号整数溢出不同,它表现出定义明确的行为。
值基本上是“环绕”的。它是安全的,通常用于倒计时,或散列/mod函数。
发布于 2012-02-08 21:22:30
这可能在一定程度上取决于您的编译器。几年前我遇到过这样的错误,有时你会得到运行时错误,其他时候,它会“包裹”回一个非常小的数字,这将导致砍掉最高电平的位,并留下余数,也就是说,如果它是一个32位的无符号整数,而你的乘法结果是一个34位的数字,它会砍掉高位的2位,给你余数。您可能必须在您的编译器上尝试它,以查看您得到的确切结果,这可能与使用不同的编译器得到的结果不同,特别是如果溢出发生在表达式的中间,其中最终结果在无符号int的范围内。
https://stackoverflow.com/questions/9193880
复制相似问题