gpt4 book ai didi

java - 为什么模运算结果取被除数类型而不是除数类型?

转载 作者:行者123 更新时间:2023-12-04 15:53:49 25 4
gpt4 key购买 nike

为什么模运算的结果 a % b 的类型与 a 相同,而不是 b 类型?

除法后的余数从不 将大于除数,因此结果的类型将适合除数的类型。所以在 a % b 中,结果将符合 b 的类型。

因此,如果 b 是一个 Int,那么结果也应该是 Int。为什么是 Long

例子:

val a: Long = Long.MaxValue
val b: Int = 10

a % b

结果:

a: Long = 9223372036854775807
b: Int = 10

res0: Long = 7

res0 中,我期待一个 Int

我在 Scala contributors 中问过同样的问题能够关注对话的论坛。

最佳答案

如评论中所述,Scala 在此遵循 Java。 Java 遵循 C。C 实际上有充分的理由!即:

  1. 它有独立的有符号和无符号类型;

  2. a % b 的结果与 a 的符号相同(例如 -10 % 3-1 )。 (这在旧的 C 版本中不是必需的,但总是允许的。)

所以如果上面的-10signed long并且3unsigned int,那么结果可以' t 与除数的类型相同,因为它必须是有符号的。它也不能是 signed int,因为我们可以用适合 unsigned int 而不是 signed int 的东西代替 3 。应用与其他算术运算符相同的规则可提供合理的返回类型,这就是 C 所做的。

关于java - 为什么模运算结果取被除数类型而不是除数类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59238999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com