Tag: 整数溢出

如何定义已检查整数的列表

我有一个整数列表定义为List myIntList = new List(); 像往常一样,我将使用myIntList.Add()方法为列表添加值。 我面临的问题是列表中的值是动态的(一些计算的结果),可能超过整数可以容纳的最大值。 请考虑以下情形: int x = int.MaxValue; myIntList.Add(x + 1); 这将在列表中添加-2147483648而不是抛出exception。 我需要在这里抛出exception。 我知道myIntList.Add(checked(x + 1)); 将完美地完成工作,或者我甚至可以将myIntList.Add()括在checked{} ,如下所示: checked { myIntList.Add(12); myIntList.Add(int.MaxValue); myIntList.Add(x + 1); } 这是我的问题这有什么替代方案吗? 我可以定义已检查整数的列表吗? 如何在列表中添加的值超出限制的情况下创建引发exception的列表? 更新: 谢谢大家的回复,大多数人建议在将它们添加到列表之前检查整数(如果它超出边界则抛出exception)。 这与我通过给定的片段checked{// add elements }所做的相同,它将抛出exception而不进行任何复杂的条件检查。

递增超出整数限制的整数值 – C#

我有一个for循环,它继续递增一个整数值,直到循环完成。 因此,如果限制n是双变量并且递增变量’i’是整数,则i增加超出其限制。 double total = 0; double number = hugetValue; for (int i = 1; i <= number; i++) { total = total + i; } return total; 如果’i’超过其容量,会发生什么? 我的价值如何变化? 我会收到运行时错误吗? 谢谢 NLV

两个大数字之间的差异C#

对于小数字,已经有解决这个问题的方法: 这里: 2个数字之间的差异 这里: C#函数找到两个数字的增量 这里: 如何在C#中找到2个值之间的差异? 我将总结所有人的答案: Math.Abs(a – b) 问题是当数字很大时,这会给出错误的答案(通过溢出)。 更糟糕的是,如果(a – b) = Int32.MinValue则Math.Abs因exception而崩溃(因为Int32.MaxValue = Int32.MinValue – 1 ): 发生了System.OverflowException 的HResult = 0x80131516 消息= 否定二进制补码数的最小值 无效 。 来源= mscorlib程序 StackTrace:在System.Math.Abs​​(Int32值)的System.Math.Abs​​Helper(Int32值)处 它的特殊性质导致难以重现的错误。 也许我错过了一些众所周知的库函数,但有没有办法安全地确定差异?