这两个表达式有什么区别
今天居然被c++一个语法问题导致数据一直出错
后来debug N久,才发现是下面语句出问题了
long long Ans=0;
for(int i=1;i<=State;++i){
Ans += (long long)(ans[0][i] * ans[1][i]);
}
long long Ans=0;
for(int i=1;i<=State;++i){
Ans += (long long)ans[0][i] * ans[1][i];
}
第一个是我的有问题的语句,第二个是我后来改正后(就是少了一个括号,导致数据一直算错,溢出问题)
其中 ans数组是int型的
请教各位 这两个的区别在哪,为什么第一个会导致错误?
我的想法是,第一个先计算了后面两个的积,然后再进行强制类型转换,这样就会有溢出现象
第二个是先把第一个ans[0][i]强制转换,然后再与ans[1][i]相乘,由于c++向高位靠拢,故最后还是一个64位的整数.
(可是写的时候想当然把c,c++的强制转换融合了,都没怎么注意,debug的时候,怎么都没想到竟然是这个小点出问题了.....)