为什么 Int32.MinValue - 1 返回 Int32.MaxValue?

发布于 2024-11-16 08:25:52 字数 287 浏览 1 评论 0原文

当我执行以下代码时,我(对我来说)出现了一些意想不到的行为。

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

简单爱 2024-11-23 08:25:52

由于下溢,值会环绕。

您需要使用 checked 部分,如果你想要抛出溢出/下溢。

checked 关键字用于显式启用整型算术运算和转换的溢出检查。

Because of the underflow the values wrap around.

You need to use a checked section if you want overflows/underflows to throw.

The checked keyword is used to explicitly enable overflow checking for integral-type arithmetic operations and conversions.

浅黛梨妆こ 2024-11-23 08:25:52

来自 MSDN:

当发生整数溢出时,会发生什么取决于执行上下文,可以检查或不检查。在检查的上下文中,会引发 OverflowException。在未经检查的上下文中,结果的最高有效位将被丢弃并继续执行。因此,C# 使您可以选择处理或忽略溢出。

MSDN 链接

From MSDN:

When integer overflow occurs, what happens depends on the execution context, which can be checked or unchecked. In a checked context, an OverflowException is thrown. In an unchecked context, the most significant bits of the result are discarded and execution continues. Thus, C# gives you the choice of handling or ignoring overflow.

Link to MSDN

笑忘罢 2024-11-23 08:25:52

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 getting 011...111.

铜锣湾横着走 2024-11-23 08:25:52

int 是一个二进制补码二进制数。

int is a two's complement binary number.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文