.NET / C# - 允许整数溢出

时间:2009-12-30 03:22:38

标签: c# .net integer overflow

最近我开始制作一个项目容器,每次用户尝试将一个项目添加到容器中。如果存在相同的项目类型,它会将它们叠加在一起,但是有一个限制,int.MaxValue如果我尝试了:

if (2147483647 + 2147483647 > int.MaxValue)

这会给我以下错误:

The operation overflows at compile time in checked mode

所以我尝试使用未经检查的关键字,如:

unchecked
{
     if (2147483647 + 2147483647 > int.MaxValue)
     {
     }
}

但是这根本没有触发if语句(我猜它是围绕着一个逻辑AND运算符?)

还有其他方法吗? (不使用像int64这样的东西)

3 个答案:

答案 0 :(得分:2)

如果int操作溢出,则不会测试大于Int32.MaxValue

如果您希望该条件为真,请使用long。

if (2147483647L + 2147483647L > int.MaxValue) ...

或者,使用uint s。

if (2147483647U + 2147483647U > (uint)int.MaxValue) ...

答案 1 :(得分:1)

如果不需要负空间的一半,请尝试将两者都转换为uint(无符号)。相同的位宽,在Int.MaxValue之后不会滚动为负(例如,它是int.MaxValue的2倍)

答案 2 :(得分:0)