Int64%Int32给出Int64结果

时间:2019-02-18 17:09:59

标签: c# .net long-integer

long longVar = 100_000_000_000;
int intVar = int.MinValue;
long result = longVar % intVar;

在此示例中,为什么结果应该很长?它不能超过Int32.MaxValue,为什么决定在此操作中剩余Int64?

2 个答案:

答案 0 :(得分:4)

根据C# specification,仅预定义了以下整数类型的余数运算符:

int operator %(int x, int y);
uint operator %(uint x, uint y);
long operator %(long x, long y);
ulong operator %(ulong x, ulong y);

因此,在您的情况下,编译器会选择long(long, long)版本,并将intVar强制转换为long。然后结果的类型为long

答案 1 :(得分:0)

因为如果您在这种情况下尝试使用Int32,将出现OverflowException(也许)。并且在任何时刻都会被投射到更大的物体中。例如:

int firstNumber = 10;
long secondNumber = 100;
var result = firstNumber + secondNumber;

(结果-长) 如果您不相信我,可以查看。

这是由于自动转换为特定方法的参数类型所致。您的情况是“%”。对于'+'号,您可以覆盖该语句并指定您自己的语句实现。