Bha*_*arg 2 c++ type-conversion
我从阅读转换int到long long int正在促销,因此认为不应该有任何问题,因为没有数据丢失,不像反之亦然转换.
但是当我将两个int大的值相乘并存储它时long long int,它会显示负数.
例如:
int a=1000000, b=1000000;
long long int c=a*b;
cout<<c;
Run Code Online (Sandbox Code Playgroud)
上面的代码给了我一个负值.有人可以解释原因吗?
a*b仍然是类型int.评估后,结果将转换为long long int.那时候避免溢出已经太晚了.long long int在执行乘法之前,将其中一个值转换为.试试这个 :
#include <iostream>
using std::cout;
int main()
{
int a = 1000000, b = 1000000;
long long int c = static_cast<long long int>(a)*b;
cout << c;
return 0;
};
Run Code Online (Sandbox Code Playgroud)
乘法正在发生的事情为int,其溢出,给未定义行为(在这种情况下溢出,这是非常正常的-你的编译器+设置甚至会保证它的组合),以及之后的结果被转换为long long.
我想你想在乘法之前对其中一个参数进行转换,以便使用long longs 执行乘法运算:
long long c = static_cast<long long>(a)*b;
Run Code Online (Sandbox Code Playgroud)
这样,在乘法发生之前b将被提升long long,并且整个操作将安全地执行,并具有期望的结果.
| 归档时间: |
|
| 查看次数: |
353 次 |
| 最近记录: |