为什么模数运算符(%)结果隐式地转换到C#的左侧而不是右侧?

时间:2011-02-18 00:55:31

标签: c# operators integer modulus

请使用以下代码:

long longInteger = 42;
int normalInteger = 23;
object rem = longInteger % normalInteger;

如果remlongInteger / normalInteger的余数,那么余数总是不应该被较小的“int”(除数)所限制吗?但在C#中,上述代码导致remlong

rem转换为int而不丢失任何数据是否安全?

int remainder = Convert.ToInt32(rem);

3 个答案:

答案 0 :(得分:4)

模运算符没有超载longint,因此int将转换为long以匹配其他操作数。< / p>

在较低级别查看它,在CPU中没有用于计算模数的单独指令,它只是除法运算的结果之一。操作的输出是除法和提醒的结果。两者的大小相同,因此除法的结果必须是long,提醒也是如此。

由于提醒必须小于除数,因此当除数来自int时,您可以安全地将结果转换为int

答案 1 :(得分:1)

无论你的两个整数是什么,结果必须低于“normalInteger”。因此,结果“rem”将被限制为int类型的限制。因此,将rem转换为int将是安全的,而不会丢失数据。

答案 2 :(得分:0)

是的,它没有问题,转换功能将围绕结果。然后你应该知道它是否对你有用。