Tag: 溢出

如何找出当前的溢出检查上下文?

有没有办法在C#中做到这一点? 例如,如果调用了您的方法,并且您想知道调用者是否已将方法调用放入已检查的块中?

确定操作是否会导致溢出?

我的应用程序中有一些代表物理单位的类,例如温度。 这些类能够使一些单元与它们相关联并进行更改,例如Celcius和Kelvin。 它们还具有用户定义的最大值和最小值。 当我想要改变单位时,我得到两个给定单位之间的转换因子,然后通过用转换因子执行一些算术运算来改变类中的Min , Max和Data值。 Double ConversionFactor = GetConversionFactor(curUnits, newUnits); Units = newUnits; Min *= ConversionFactor; Max *= ConversionFactor; Data *= ConversionFactor; 我遇到的问题是,有时用户可能允许max和min值为某些类型的MinValue和MaxValue ,例如Double 。 如果用户要更改转换因子大于1的单位,则会导致溢出。 在C#中是否有办法检测溢出和下溢是否会发生这种溢出? 从我可以告诉我的一些测试,我认为我只需要检查操作的结果是否不等于正或负无穷大? 如果是这样,我可以将值设置回MinValue或MaxValue 。 另外,奖金问题。 在我的测试中,我发现如果我创建一个Double max = Double.MaxValue并添加一些小到100的东西。 该值不会改变。 为什么是这样? MaxValue和PositiveInfinity之间是否有一些阈值,因为精度MaxValue而且值很大?

C ++ / CLI相当于C#checked关键字

有没有办法让C ++ / CLI中的托管代码在算术溢出时抛出exception? C#有check关键字和全局项目标志来启用它们,但我在C ++ / CLI中都找不到… 我的情况是我在.NET中包装C ++库。 有时C ++本机代码会溢出。 我正在考虑将一些敏感的计算移动到现有的C ++ / CLI包装器,但也许这是不可能的?

整数溢出 – 将C#转换为VB.Net代码

从C#到VB.Net的代码转换出了问题。 var x = 5783615; var y = 56811584; var t = x * y; x,y和t是整数。 在c#’t’将是-15536​​49728。 在VB.Net中,我将得到一个整数溢出exception。 知道怎么解决吗?

平均函数没有溢出exception

.NET Framework 3.5。 我试图计算一些相当大的数字的平均值。 例如: using System; using System.Linq; class Program { static void Main(string[] args) { var items = new long[] { long.MaxValue – 100, long.MaxValue – 200, long.MaxValue – 300 }; try { var avg = items.Average(); Console.WriteLine(avg); } catch (OverflowException ex) { Console.WriteLine(“can’t calculate that!”); } Console.ReadLine(); } } 显然,数学结果是9223372036854775607( long.MaxValue – […]

C#和VB.NET中的转换之间的区别

以下代码在C#中工作正常。 Int32 a, b; Int16 c; a = 0x7FFFFFFF; b = a & 0xFFFF; c = (Int16)b; 但是这个代码在VB.NET中出现了OverflowException。 Dim a, b As Int32 Dim c As Int16 a = &H7FFFFFFF b = a And &HFFFF c = CType(b, Int16) 两个代码片段对我来说都是一样的。 有什么区别,我怎样才能将C#代码转换为VB.NET?

为什么确实返回true?

我想知道你是否可以解释浮点类型的溢出。 float.MaxValue == float.MaxValue + 1 // returns true

C#溢出不起作用? 如何启用溢出检查?

我正在使用C#,并注意到当我有一个非常大的整数并试图使它变大。 而是抛出某种类型的溢出错误,它只是将数字设置为我认为的最低可能值(-2,147,483,648)。 我想知道是否有办法在Visual Studio中启用溢出检查?

为什么在C#中允许“long”作为数组长度?

我想尝试分配一个40亿字节的数组,这是我的C#代码: long size = 4 * 1000; size *= 1000; size *= 1000; byte[] array = new byte[size]; 此代码在包含new的行上的System.OverflowException失败。 好的,结果是Length返回int ,所以数组长度也限制为int可以存储的内容。 那么为什么没有编译时错误,并且允许long作为分配时数组元素的数量?

为什么C#默认不使用算术溢出检查?

可能重复: 为什么语言默认情况下不会在整数溢出上引发错误? 为什么C#默认不使用算术溢出检查? 我认为发生exception通常会更好,这样就不会模糊错误。 我知道利用发生的“包装”行为偶尔会有用,但是在这些情况下可以使用unchecked关键字来明确意图。 我希望这个决定是故意做出的,也许是为了增加与其他基于C语言的兼容性。