gpt4 book ai didi

C# Math.Max 类型处理

转载 作者:行者123 更新时间:2023-12-02 22:39:44 27 4
gpt4 key购买 nike

我正在编写一段代码来防止 ushort 溢出/下溢。在此之前我尝试:

ushort a = 0; //ushort.MinValue
a -= 1; //returns 65535 (ushort.MaxValue)

然后我编写真正的代码,我希望它“失败”(无法检测到下溢):

ushort oldValue, rate, delta;
ushort newValue = Math.Max(ushort.MinValue, oldValue - rate * delta);

有趣的是,一个错误 (CS0266) 阻止了我构建它。虽然我预计 C# 将使用 ushort Max(ushort, ushort) 重载,但它正在使用 int Max(int, int) 重载并且 ushort 值会自动转换为 int。当然,当我将结果显式转换为 ushort 时,效果很好。

这让我想到,C# 是否检测到可能发生下溢,所以它正在使用 int 为我进行比较?

最佳答案

这是因为 oldValue - rate * delta 的结果是 int 类型。这是因为定义运算符 +、-、* 和/的“最小数据类型”是 int。所以byteushort等先转换为int。然后,结果又是一个 int。因此,您需要显式转换为 ushort

或者您可以使用 Convert.ToUInt16,它会在发生溢出时引发异常。

关于C# Math.Max 类型处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10916125/

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