[英]Int64 % Int32 gives Int64 result
long longVar = 100_000_000_000;
int intVar = int.MinValue;
long result = longVar % intVar;
在此示例中,为什么结果应该很长? 它不能超过Int32.MaxValue,为什么决定在此操作中剩余Int64?
根据C#规范,仅以下整数类型的余数运算符是预定义的:
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
类型的。
因为如果您尝试在这种情况下使用Int32,将导致OverflowException(也许)。 并且在任何时刻都会被投射到更大的物体中。 例如:
int firstNumber = 10;
long secondNumber = 100;
var result = firstNumber + secondNumber;
(结果-长)如果您不相信我,可以进行检查。
这是由于自动转换为特定方法的参数类型。 您的情况是“%”。 对于“ +”号,您可以覆盖该语句并指定您自己的语句实现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.