C#中整数类型的溢出
overflow of the integer type in C#
在C#语言中,int类型本身可以维护的最大值和最小值是-2,147,483,648到2,147,483,647。
为什么如果我们在最大值上加上 2 个单位,编译器不显示任何错误?
只显示-2,147,483,646,为负数,比int类型可以保存的最小值大两个单位
它的行为是朝向圆的。
你选择一个地方开始(这里是黑线)。然后你要做一个完整的圆,然后你会达到它的最大尺寸。
现在,您不会遇到问题,而是会再次开始同一个圆圈(蓝线是那 2 个数字),这就是为什么在达到正数最大值后转向负数的原因。
这会导致很多问题,所以最好做一些 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
编辑:
It is runtime behaviour
感谢 Klaus(查看评论)。
在C#语言中,int类型本身可以维护的最大值和最小值是-2,147,483,648到2,147,483,647。
为什么如果我们在最大值上加上 2 个单位,编译器不显示任何错误?
只显示-2,147,483,646,为负数,比int类型可以保存的最小值大两个单位
它的行为是朝向圆的。
你选择一个地方开始(这里是黑线)。然后你要做一个完整的圆,然后你会达到它的最大尺寸。
现在,您不会遇到问题,而是会再次开始同一个圆圈(蓝线是那 2 个数字),这就是为什么在达到正数最大值后转向负数的原因。
这会导致很多问题,所以最好做一些 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
编辑:
It is runtime behaviour
感谢 Klaus(查看评论)。