我正在编写一段代码来防止 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
用来为我做比较?