[英]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.