在使用int数据类型的C#中添加大数的问题

问题描述 投票:0回答:3

我正在尝试使用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# .net int long-integer
3个回答
1
投票

由于性能C#(不是dotnet)和我知道的任何其他语言使用最大的公分母来进行操作。这是他们之间的共同点。不是结果,这是必须猜测的。

因此,加2个int编号可能会导致int操作溢出。将long添加int是一个很长的操作。加两个long是一个很长的操作。

很简单。如果知道会溢出,请声明其中一种类型更长一些。

现在,您可以强制转换-您也可以只声明它们,只要知道。

C# short/long/int literal format?

显示所有内容。

  • 1111是一个整数
  • 1111UL是一个无符号的长整数。

因此,如果您告诉编译器在文字中使用正确的数据类型,则无需强制转换。


0
投票

int具有maximum value of 2,147,483,647。如果尝试使int大于此值(例如,通过将两个较小的ints相加),则它将环绕成非常大的负数。这就是result1中发生的情况。

long更大,最大值为9,223,372,036,854,775,807。这足够大,可以容纳您要表示的值。


0
投票

您可以使用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();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.