我正在尝试使用C ++为我计算一个数字,但是我得到了错误的答案。我认为这可能与数据类型有关?
我试图在相乘之前很长时间将所有数字转换为无符号,但是结果是相同的。
#include <iostream>
using namespace std;
int main()
{
unsigned int width = 8864;
unsigned int height = 5288;
unsigned int NImg = 50;
unsigned long TotalBytes;
TotalBytes = (width * height * NImg + 2 ) * 2;
cout<<TotalBytes<<endl;
}
TotalBytes应该计算为4687283204,但是c ++代码却给我392315908。
非常感谢您
答案 0 :(得分:2)
您平台上的unsigned long
也是32位,就像unsigned int
一样。这还不足以存储计算结果。您必须使用unsigned long long
,或者,如果需要,可以使用uint64_t
:
#include <iostream>
#include <cstdint>
using namespace std;
int main()
{
uint64_t width = 8864;
uint64_t height = 5288;
uint64_t NImg = 50;
uint64_t TotalBytes;
TotalBytes = (width * height * NImg + 2 ) * 2;
cout<<TotalBytes<<endl;
}
答案 1 :(得分:-1)
尝试使用Big Integer。您可以创建一个类或使用某人的库来实现它。例如,http://www.cplusplus.com/forum/general/108176/