【问题标题】:Modulo operator difference in different languages [duplicate]不同语言中的模运算符差异[重复]
【发布时间】:2020-05-19 20:41:12
【问题描述】:

根据编程语言的不同,模运算符的答案似乎有所不同。例如,c++cJava 对于像 -5%2 这样的表达式都返回 -1,而 python3.x 对于相同的计算输出 1。为什么会这样?

编辑:错误地写成了 -10%2 而不是 -5%2。

【问题讨论】:

  • 在这个问题中,c 和 c++9 使用 printf("%d"),Java 使用 sout(),python 使用 print()
  • 呃,所有语言都应该是 0
  • 把问题放在一边:在 Python 中,结果的签名取决于第二个操作数的签名。
  • Java 中没有模运算符。它是一个余数运算符。仅此一项就足以回答您的问题。
  • “为什么会这样?” 因为 Python 的设计者决定不遵循 C 的先例,而 Java 的设计者决定保持先例(很多 Java 的特性,实际上)。

标签: java python c++ c modulo


【解决方案1】:

mod 的行为因您使用的语言以及您在该语言中使用的 mod 实现而异。

此处的行为列表:https://en.wikipedia.org/wiki/Modulo_operation#In_programming_languages

在您的情况下,python 中 % 的结果采用除数的符号。

>>> 11%-2
-1
>>> -11%2
1

math.fmod 正好相反。

>>> import math
>>> math.fmod(11,-2)
1.0
>>> math.fmod(-11,2)
-1.0

Java 正好相反。 % 使用除数,fmod 使用除数。

【讨论】:

    猜你喜欢
    • 2021-08-03
    • 2018-11-30
    • 1970-01-01
    • 2012-03-26
    • 2017-04-03
    • 1970-01-01
    • 1970-01-01
    • 2013-07-15
    • 2016-04-14
    相关资源
    最近更新 更多