最近我开始制作一个项目容器,每次用户尝试将一个项目添加到容器中。如果存在相同的项目类型,它会将它们叠加在一起,但是有一个限制,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这样的东西)
答案 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)