请使用以下代码:
long longInteger = 42;
int normalInteger = 23;
object rem = longInteger % normalInteger;
如果rem
是longInteger / normalInteger
的余数,那么余数总是不应该被较小的“int”(除数)所限制吗?但在C#中,上述代码导致rem
为long
。
将rem
转换为int
而不丢失任何数据是否安全?
int remainder = Convert.ToInt32(rem);
答案 0 :(得分:4)
模运算符没有超载long
和int
,因此int
将转换为long
以匹配其他操作数。< / p>
在较低级别查看它,在CPU中没有用于计算模数的单独指令,它只是除法运算的结果之一。操作的输出是除法和提醒的结果。两者的大小相同,因此除法的结果必须是long
,提醒也是如此。
由于提醒必须小于除数,因此当除数来自int
时,您可以安全地将结果转换为int
。
答案 1 :(得分:1)
无论你的两个整数是什么,结果必须低于“normalInteger”。因此,结果“rem”将被限制为int类型的限制。因此,将rem转换为int将是安全的,而不会丢失数据。
答案 2 :(得分:0)
是的,它没有问题,转换功能将围绕结果。然后你应该知道它是否对你有用。