gpt4 book ai didi

c# - 整数溢出检测 C# for Add

转载 作者:太空宇宙 更新时间:2023-11-03 23:31:35 26 4
gpt4 key购买 nike

很容易让 C# 在整数溢出时抛出异常。但是,这不是我要找的。我想检测溢出,以便我可以继续进行高阶计算。我正在构建一种大型 int 实现。

我可以捕获溢出异常,但这对性能来说不是很好。更不用说它在概念上是不正确的。

知道如何毫无异常(exception)地检查溢出吗?

最佳答案

如果您正在寻找进位行为,其他答案/评论可以很好地涵盖这一点。然而,我发现原来的问题是一个有趣的脑力难题(虽然实际上没有用),具体来说,检测 2 个有符号整数相加溢出的最佳性能纯 C# 方法是什么。理想情况下,它会生成最少的没有分支的 IL 指令。这是我最终得到的最好的 - 一个带有 bool 标志(溢出时为 true,否则为 false),另一个带有 int “bit”(溢出时为 1,否则为 0)。两者都满足上述标准,“位”版本少了一些 IL 指令。享受:-)

static int Add(int a, int b, out bool overflowFlag)
{
unchecked
{
int c = a + b;
overflowFlag = ((a ^ b) >= 0) & ((a ^ c) < 0);
return c;
}
}
static int Add(int a, int b, out int overflowBit)
{
unchecked
{
int c = a + b;
overflowBit = (int)((uint)((a ^ c) & ~(a ^ b)) >> 31);
return c;
}
}

关于c# - 整数溢出检测 C# for Add,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32021741/

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