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
}
您可以为结果使用适当的存储类型。如果您存储大量结果然后将它们用于进一步计算,它可以变得非常高效。希望对你有帮助。
所以我有一个代码可以将两个整数相加并打印结果:
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
}
您可以为结果使用适当的存储类型。如果您存储大量结果然后将它们用于进一步计算,它可以变得非常高效。希望对你有帮助。