隐式转换时的溢出及溢出的解决方法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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溢出问题.

相关文档
最新文档