gpt4 book ai didi

c# - 统计一次操作的溢出次数

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

从关于这个主题的大量问题中,我知道如何检测溢出:

try {
checked(doSomething());
} catch(OverflowException e) {
//Handle overflow
}

但是,有没有一种方法不仅可以检测是否至少有一次溢出,还可以实际计算有多少次溢出?

编辑:为了消除误解,我不想只计算有多少操作导致音调或更多溢出,而是有多少溢出是由某个操作导致的

最佳答案

假设这是针对整数,为 Int32 编写一个包装类,在其中重载所有运算符并将溢出求和到一个静态变量中。在这些运算符中执行溢出检测,最简单(也是最慢)的是使用 checked/try-catch 路线,但如果您需要性能,则有更智能的选择(即比较符号)。

然后到处用你的包装类替换 int。

基本代码结构:

struct CheckedInt {
static int s_numOverflows = 0;
int m_value;

public CheckedInt(int value) { m_value = value; }
public static CheckedInt operator +(CheckedInt x, CheckedInt y) {
try {
return new CheckedInt(checked(x.m_value + y.m_value));
}
catch(OverflowException) {
++s_numOverflows;
return new CheckedInt(unchecked(x.m_value + y.m_value));
}
}
// ... etc for all operators, you'll also need to implement casts, IComparable(T), IEquatable(T), etc.
}

关于c# - 统计一次操作的溢出次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15031369/

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