繁体   English   中英

Int64%Int32给出Int64结果

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM