long longVar = 100_000_000_000;
int intVar = int.MinValue;
long result = longVar % intVar;在这个例子中,为什么结果应该很长?不能大于Int32.MaxValue,为什么在此操作中决定将余数设为Int64?
发布于 2019-02-19 01:17:04
根据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类型。
发布于 2019-02-19 01:26:49
因为在这种情况下,如果您尝试使用Int32,则可能是OverflowException(可能)。任何时刻都会被投射到更大的物体中。例如:
int firstNumber = 10;
long secondNumber = 100;
var result = firstNumber + secondNumber;(result - long)如果你不相信我,你可以去看看。
这是由于自动转换为特定方法的参数类型造成的。在您的例子中,这是'%‘。在'+‘符号的情况下,您可以覆盖该语句,并指定此语句的您自己的实现。
https://stackoverflow.com/questions/54752206
复制相似问题