【问题标题】:overflow of the integer type in C# [duplicate]C#中整数类型的溢出[重复]
【发布时间】:2021-03-11 01:21:41
【问题描述】:

在 C# 语言中,int 类型本身可以保持的最大值和最小值为 -2,147,483,648 到 2,147,483,647。

为什么如果我们在最大值上加 2 个单位,编译器不会显示任何错误?

它只显示-2,147,483,646,它是负数,比int类型可以保存的最小值大两个单位。

【问题讨论】:

  • this 解释了这种行为以及如何改变它。 (至于我之前的评论:我真的认为 c# 默认情况下在检查模式下工作。我当然认为它应该

标签: c# integer max overflow min


【解决方案1】:

它的行为就像朝着圆一样。

你选择一个地方开始(这​​里是黑线)。然后你会做一个完整的圆圈,然后你会达到它的最大尺寸。

现在,您将不再遇到问题,而是再次开始同一个圆圈(蓝线是那两个数字),这就是您在达到最大正数后转向负数的原因。

这会导致很多问题,所以最好做一些 if-else(或其他)来保护你的程序。

这是您的示例。
当我们添加一些东西时,会发生这种情况:2,147,483,647 -> -2,147,483,648 -> -2,147,483,647 ...

如果您使用了unsigned int 并尝试减少它们(4,3,2,1,0 ..),那么您不会移动到负数,而是移动到最大值 4,294,967,295

编辑:

这是运行时行为

感谢克劳斯(看 cmets)。

【讨论】:

  • 这与编译器无关,它是运行时行为。此外,您可以使用 checked(...)unchecked(...) 语句调整行为。
猜你喜欢
  • 2017-12-06
  • 2018-08-21
  • 2012-10-05
  • 2019-08-23
  • 1970-01-01
  • 2022-01-07
  • 1970-01-01
  • 2020-10-22
相关资源
最近更新 更多