gpt4 book ai didi

c# - 检查算术溢出并获取溢出计数?

转载 作者:行者123 更新时间:2023-11-30 20:50:24 24 4
gpt4 key购买 nike

检测算术溢出(或下溢)并获取溢出计数的最合适方法是什么?

为了更容易理解,我将使用 byte,但这对于 int 或任何其他基本整数类型都是相同的。现在假设我有值 240 并想将 24 添加到它。显然是算术溢出。使用 checked 关键字,这至少很容易检测到......

byte value = 240;
try
{
checked
{
value += 24;
}
}
catch (OverflowException e)
{
// handle overflow, get overflow count via % etc.
}

...通过抛出异常。

这就是我目前正在使用的。

但是,我不太喜欢这个中的异常处理。异常通常非常昂贵,我想从一开始就避免它们。对我来说,这似乎是一个 Boneheaded-Exception无论如何。 我可以使用一些算术魔法来预先检测到这一点吗?

最佳答案

我猜你可以检查当前值和最大值之间的差异是否大到足以进行加法:

var difference = byte.MaxValue - value;

if(difference >= 24)//OK to add 24
else//will cause overflow

要检测下溢,您可以使用 byte.MinValue 值代替:

var difference = value - byte.MinValue;
if(difference >= 24)//OK to subtract 24
else//will cause underflow

考虑到这些,您可以为它们制作一些扩展方法:

public static class OverflowExtensions
{
public static bool WillAdditionOverflow(this byte b, int val)
{
return byte.MaxValue - b < val;
}

public static bool WillSubtractionUnderflow(this byte b, int val)
{
return b - byte.MinValue < val;
}
}

你可以这样使用:

using MyApp.OverflowExtensions;
//...

if(value.WillAdditionOverflow(24))
//value + 24 will cause overflow

if(value.WillSubtractionUnderflow(24))
//value - 24 will cause underflow

关于c# - 检查算术溢出并获取溢出计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22612418/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com