2

所以我有一个添加两个整数并打印结果的代码:

        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 变量很长,为什么我会得到错误的结果?

4

3 回答 3

2

结果不是 type long。它是 type 的int,然后它被转换为 long 以便将其分配给 type 的变量long

这是需要做的,如下:

long sum = (long)intTemp + 5;

或者

long sum = intTemp + (long)5;

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

于 2020-03-03T13:04:35.617 回答
1

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

于 2020-03-03T13:04:11.573 回答
0

键就像已经提到的那样,您需要将其中一个值转换long为能够保留正确的值,否则结果值在分配给之前已经损坏long。我想建议您可以MaxValue在这些数字类型中使用以使计算内存友好,如果您将在其中使用它进行计算。int占用 32 位和long64 位。如果计算结果仍然是,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
}

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

于 2020-03-03T14:25:08.797 回答