整型溢出问题
[code=C/C++][/code]
#include<iostream>
using namespace std;
int main()
{
int a,b;
while(cin>>a>>b)
cout<<a*b<<endl;
return 0;
}
a*b没有建立对象来存储,那么系统会建立临时无名对象。那么临时对象是什么类型的,是整型吗?如果把a定义成
__int64的,那么临时对象又会是什么类型呢?
[解决办法]
int * int = int
__int64 * int = __int64
忘了在哪学的了 搜了一下也没找到
[解决办法]
MSDN : type conversion [C++] 下的 arithmetic
顺序规则为:
1. 如果任一个操作数是long double,都转换成long double再进行运算
2. 不满足以上条件的情况下,如果任一个操作数是double,都转换成double再进行运算
3. 不满足以上条件的情况下,如果任一个操作数是float,都转换成float再进行运算
4. 不满足以上条件的情况下,如果任一个操作数是unsigned long,都转换成unsigned long进行运算。
5. 不满足以上条件的情况下,如果两个操作数类型是long和unsigned int,则都转换为unsigned long进行运算。
6. 不满足以上条件的情况下,如果任一个操作数是long,都转换成long进行运算。
7. 不满足以上条件的情况下,如果任一个操作数是unsigned int,都转换成unsigned int进行运算。
8. 不满足以上条件的情况下,都转换成int进行计算。
按照这种转换规则来看,如果两个都是整数,其中一个是__int64,则两个数均被提升为__int64再进行计算。