c# - 为什么模运算符 (%) 结果在 C# 中隐式转换到左侧而不是右侧?

标签 c# operators integer modulus

采用以下代码:

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

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

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

int remainder = Convert.ToInt32(rem);

最佳答案

没有采用longint 的模运算符重载,因此int 将被转换为 long 来匹配另一个操作数。

往下看,在CPU中并没有单独的求模指令,它只是除法运算的结果之一。运算的输出是除法的结果,也是提醒。两者大小相同,所以除法的结果必须是一个long,所以提醒。

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

关于c# - 为什么模运算符 (%) 结果在 C# 中隐式转换到左侧而不是右侧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5036592/

相关文章:

C# BackgroundWorker 循环回问题

c# - 在文本框中显示格式化的 xml

r - 为什么数据帧迭代中的逻辑运算不返回正确的值?

java - 如果字符已经是java中的数字,则将字符转换为整数

java - 以位 : Error 表示整数

floating-point - 无法将 IEEEReal.rounding_mode 与 real 统一

c# - 如何将数据写入yaml文件

c# 3.0 转换接口(interface)泛型类型

c++ - 重载箭头 ( -> ) 运算符 C++ 的问题

vb6 - <>在visual basic中是什么意思?