采用以下代码:
long longInteger = 42;
int normalInteger = 23;
object rem = longInteger % normalInteger;
如果 rem
是 longInteger/normalInteger
的余数,余数不应该总是以较小的“int”(除数)为界吗?然而在 C# 中,上述代码导致 rem
成为 long
。
将 rem
转换为 int
而不丢失任何数据是否安全?
int remainder = Convert.ToInt32(rem);
最佳答案
没有采用long
和int
的模运算符重载,因此int
将被转换为 long
来匹配另一个操作数。
往下看,在CPU中并没有单独的求模指令,它只是除法运算的结果之一。运算的输出是除法的结果,也是提醒。两者大小相同,所以除法的结果必须是一个long
,所以提醒。
由于提醒必须小于除数,因此当除数来自 int
时,您可以安全地将结果转换为 int
。
关于c# - 为什么模运算符 (%) 结果在 C# 中隐式转换到左侧而不是右侧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5036592/