繁体   English   中英

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类型,然后它被转换为 long 以将其分配给long类型的变量。

那是需要做的,它是以下内容:

long sum = (long)intTemp + 5;

或者

long sum = intTemp + (long)5;

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

您必须在很长时间之前将 int "intTemp" 转换为 long,因为只有在计算完成后才将总和转换为 long

关键就像已经提到的那样,您需要将其中一个值转换为long才能保留正确的值,否则结果值在分配给long之前已经损坏。 我想建议您可以在这些数字类型中使用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
}

然后您可以为结果使用适当的存储类型。 如果您要存储大量结果,然后将它们用于进一步计算,则内存效率会很高。 希望能帮助到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM