c#: 添加两个大整数给出错误的结果

c#: adding two big integers gives wrong result

所以我有一个代码可以将两个整数相加并打印结果:

        Console.WriteLine("enter number: ");
        int intTemp = Convert.ToInt32(Console.ReadLine());
        long sum = intTemp + 5;
        Console.WriteLine($"sum is : {sum}");

但是如果在控制台中我将最大值设置为 int 类型,我不会得到异常,但结果是错误的,即使我将结果保存在一个 long 变量中。这是输出:

enter number:
2147483647
sum is : -2147483644

但是如果 sum 变量是 long,为什么我会得到错误的结果?

您必须先将 int "intTemp" 转换为 long,因为求和仅在计算完成后才转换为 long

结果不是 long 类型。它是 int 类型,然后将其转换为 long 以便将其分配给 long.

类型的变量

需要做的,就是下面的:

long sum = (long)intTemp + 5;

long sum = intTemp + (long)5;

以上任一种操作,由于一个操作数是(long)类型,转换后,另一个也将转换为long,以便将两个值相加并将结果存储到sum 变量。

关键就像已经提到的那样,您需要将其中一个值转换为 long 才能保留正确的值,否则结果值在分配给 [=11 之前已经损坏=].我想建议您可以在这些数字类型中使用 MaxValue 以使计算内存友好,如果您将在那里使用它进行计算的话。 int 占用 32 位,long 占用 64 位。如果计算结果仍然是 int 那么您可以节省 32 位存储空间,直到您真正需要它为止。在你的例子中你可以做

if (int.MaxValue - 5) < intTemp ) // it means the value will go above int range if add 5
{
  // Make conversion to target type before the operation
}else{ 
  // the value will still be in int range
}

您可以为结果使用适当的存储类型。如果您存储大量结果然后将它们用于进一步计算,它可以变得非常高效。希望对你有帮助。