我编写了简单的C ++ / CLI代码来计算大整数运算的结果,但它失败了警告警告C4307: '*' : integral constant overflow
,这是我的代码:
int main(array<System::String ^> ^args)
{
String^ number = gcnew String((wchar_t *)(28433 * (2 ^ 7830457) + 1));
Console::WriteLine(number);
return 0;
}
答案 0 :(得分:1)
2 ^ 7830457需要7830457位才能存储。一个数字大约1MB! 您应该从学习变量类型和它们可以处理的值开始。你真的需要这个数字的确切整数值吗?你真的需要展示它吗?这个数字是数百万字符长。
你不能使用带有这些数字的常规* / - + ^运算符,你需要一个任意大数的数学库。而且我担心它甚至不会处理如此庞大的数字。 How to handle arbitrarily large integers
答案 1 :(得分:1)
您的代码中存在许多基本的误解:
^
是xor,而不是取幂。您应该使用System.Numerics
中的BigInteger
struct。不要忘记首先将程序集引用添加到System.Numerics.dll
。