读书人

long int c=(long int)a*b表达式怎么理

发布时间: 2012-02-26 20:19:44 作者: rapoo

long int c=(long int)a*b表达式如何理解?
int a=100,b=100;
long int c = (long int)a*b;

与long int c=(long int)a * (long int)b是否等价?
与long int c=(long int)(a * b)呢?

[解决办法]
那你说现在它们等价吗?
在一些64位的系统下long int是8字节的,你说它们等价吗?
[解决办法]
既然2者字节数相同,那怎么会行为不一致呢。
[解决办法]
需要考虑一个溢出的问题。

假设在你的系统中long int确实是比int大的,那么这种转换就很有必要了。
试想a和b的乘积结果对于int已经溢出,long int c=(long int)(a * b)这种方式不能对这个结果有任何帮助,c不是你想要的值。

而如果一开始就显式指定其中一个数是long int,那么运算时另一个数也会被提高到同等精度进行计算,这时才可以得到正确的结果。因此
long int c = (long int)a*b;

long int c=(long int)a * (long int)b;
都是正确的,并且也是等价的。

读书人网 >C++

热点推荐