我正在尝试使用int dataType在C#中添加5个大数字。但是结果不正确。为什么.net强迫我将强制类型转换为long并执行添加以获得正确的结果。
using System;
public class Program
{
public static void Main()
{
int i1= 256741038,i2= 623958417,i3= 467905213 ,i4= 714532089,i5=938071625;
long l1= 256741038,l2= 623958417,l3= 467905213 ,l4= 714532089,l5=938071625;
long result1=i2+i3+i4+i5;
long result2=l2+l3+l4+l5;
long result3=(long)l2+(long)l3+(long)l4+(long)l5;
Console.WriteLine(result1);
Console.WriteLine(result2);
Console.WriteLine(result3);
}
}
由于性能C#(不是dotnet)和我知道的任何其他语言使用最大的公分母来进行操作。这是他们之间的共同点。不是结果,这是必须猜测的。
因此,加2个int编号可能会导致int操作溢出。将long添加int是一个很长的操作。加两个long是一个很长的操作。
很简单。如果知道会溢出,请声明其中一种类型更长一些。
现在,您可以强制转换-您也可以只声明它们,只要知道。
C# short/long/int literal format?
显示所有内容。
因此,如果您告诉编译器在文字中使用正确的数据类型,则无需强制转换。
int
具有maximum value of 2,147,483,647。如果尝试使int
大于此值(例如,通过将两个较小的ints
相加),则它将环绕成非常大的负数。这就是result1
中发生的情况。
long
更大,最大值为9,223,372,036,854,775,807。这足够大,可以容纳您要表示的值。
您可以使用checked
关键字(https://docs.microsoft.com/pl-pl/dotnet/csharp/language-reference/keywords/checked)来查看long result1=i2+i3+i4+i5;
正在生成System.OverflowException: 'Arithmetic operation resulted in an overflow.'
,如其他答案所述。
public static void Main()
{
checked
{
int i1 = 256741038, i2 = 623958417, i3 = 467905213, i4 = 714532089, i5 = 938071625;
long l1 = 256741038, l2 = 623958417, l3 = 467905213, l4 = 714532089, l5 = 938071625;
long result1 = i2 + i3 + i4 + i5;
long result2 = l2 + l3 + l4 + l5;
long result3 = (long)l2 + (long)l3 + (long)l4 + (long)l5;
Console.WriteLine(result1);
Console.WriteLine(result2);
Console.WriteLine(result3);
Console.Read();
}
}