3

采取以下代码:

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

如果rem是 的余数longInteger / normalInteger,余数不应该总是以较小的“int”除数为界吗?rem然而在 C# 中,上面的代码导致long.

在不丢失任何数据的情况下转换rem为安全吗?int

int remainder = Convert.ToInt32(rem);
4

3 回答 3

4

long接受 a和 an的模运算符没有重载int,因此int将转换为long以匹配另一个操作数。

在较低的层面上看,在 CPU 中没有单独的指令来计算模数,它只是除法运算的结果之一。运算的输出是除法的结果,以及提醒。两者的大小相同,因此除法的结果必须是 a long,提醒也是。

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

于 2011-02-18T01:23:18.897 回答
1

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

于 2011-02-18T01:01:05.720 回答
0

是的,它没有问题,转换函数将对结果进行四舍五入。那么你应该知道它是否对你有用。

于 2011-02-18T00:58:53.273 回答