当前位置:  开发笔记 > 编程语言 > 正文

整数溢出异常

如何解决《整数溢出异常》经验,为你挑选了1个好方法。

为什么我在这里得到编译器错误:

int a = 2147483647 + 10;

而不是在这里,如果我正在执行相同的操作:

int ten = 10;
int b = 2147483647 + ten;

我正在学习使用checked和MSDN网站不清楚为什么在第一个代码片段中引发了OverflowException:

默认情况下,如果表达式生成的值超出目标类型的范围,则仅包含常量值的表达式会导致编译器错误.如果表达式包含一个或多个非常量值,则编译器不会检测溢出.

它只解释了行为,但没有解释这种行为的原因.我想知道引擎盖下发生了什么.



1> Hamid Pourja..:

原因是当你有int a = 2147483647 + 10;编译器可以预测statement(a)的结果时它会知道它会导致溢出,因为214748364710都是常量,它们的值在编译时是已知的.

但是当你有

int ten = 10;
int b = 2147483647 + ten;

一些其他线程(或其他东西,可能是一个向导,可能是内存中的危险...)可能会ten在执行int b = 2147483647 + ten;语句之前更改值,并且无法在编译时预测溢出.

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有