Int64%Int32给出Int64结果

问题描述 投票:0回答:2
long longVar = 100_000_000_000;
int intVar = int.MinValue;
long result = longVar % intVar;

在这个例子中,为什么结果应该很长?它不能超过Int32.MaxValue,为什么决定在这个操作中创建余数Int64?

c# .net long-integer
2个回答
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类型。


0
投票

因为如果你尝试在这种情况下使用Int32将是OverflowException(也许)。并且有任何时刻将被投入更大的对象。例如:

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.