隐式转换时的溢出及溢出的解决方法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数学运算中的溢出
计算机中涉及到数学运算,最操心的一件事情就是溢出了.
比如:
int hadReadNum=287907757 ;
double sff=double(hadReadNum*100)/20;
这个结果会怎样?
不可预知, 因为hadReadNum*100将会赋值给一个临时int型变量,然后此变量会被强制转换成double类型, 实际上在转换之前, 临时int变量已经无法容纳 hadReadNum*100 产生的结果,从而导致值变得不正确.
另外编译器,至少VS的编译器,默认情况下,将我们直接写的常量,比如上面的100,识别成int型变量,
避免溢出的解决方法
1: 使用大的数据类型,比如double
2: 进行数学操作时, 最好不要先运算,而应该先进行类型转换再运算:
比如上面的 double(hadReadNum * 100)/20; 如果改成 double(hadReadNum)/20 *100;
将不会发生int溢出问题.