为什么 Int32.MinValue - 1 返回 Int32.MaxValue?
当我执行以下代码时,我(对我来说)出现了一些意想不到的行为。
int i = Int32.MinValue;
i--;
if (i == Int32.MaxValue)
{
Console.WriteLine("i == Int32.MaxValue");
}
i++;
if (i == Int32.MinValue)
{
Console.WriteLine("i == Int32.MinValue");
}
为什么 Int32.MinValue 上的 -1 不抛出异常?
When I execute the following code, I have (for me) some unexpected behaviour.
int i = Int32.MinValue;
i--;
if (i == Int32.MaxValue)
{
Console.WriteLine("i == Int32.MaxValue");
}
i++;
if (i == Int32.MinValue)
{
Console.WriteLine("i == Int32.MinValue");
}
Why doesn't the -1 on Int32.MinValue throw an Exception?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
由于下溢,值会环绕。
您需要使用
checked
部分,如果你想要抛出溢出/下溢。Because of the underflow the values wrap around.
You need to use a
checked
section if you want overflows/underflows to throw.来自 MSDN:
MSDN 链接
From MSDN:
Link to MSDN
C# 与 C 一样,实际上并不执行上溢/下溢检查,除非明确编写/告知这样做。因此,从
100...000
中减去 1 并得到011...111
是没有问题的。C#, like C, doesn't actually do overflow/underflow checks unless explicitly written/told to do so. As such, it has no problem subtracting 1 from
100...000
and getting011...111
.int
是一个二进制补码二进制数。int
is a two's complement binary number.