【问题标题】:Why -1%26 = -1 in Java and C, and why it is 25 in Python? [duplicate]为什么 -1%26 = -1 在 Java 和 C 中,为什么在 Python 中是 25? [复制]
【发布时间】:2013-03-12 17:07:31
【问题描述】:

为什么模运算符在 C 和 Java 中不能按预期工作?

【问题讨论】:

  • 余数与模数
  • 非常感谢大家!真的很有帮助!
  • 我更喜欢剩下的版本,但在 java 中,设计决定是不同的 :-(
  • 因为负数是实现定义的?

标签: java python c modulo


【解决方案1】:

Python 的 % 运算符计算数学余数,而不是模数。根据定义,余数是一个介于 0 和除数之间的数字,它不像模数那样取决于被除数的符号。

【讨论】:

  • 实际上,你已经把它弄反了。如果 y 为正,则“x mod y”将介于 0 和 y-1 之间,而“x 余数 y”的符号将取决于 x 的符号。我想不出我曾经在负数上使用过“%”运算符并想要余数的任何场合,但长期以来,该标准只要求“%”具有正数的特定行为;在那些情况下,“mod”和“remainder”是同义词,“mod”更容易说,所以这就是卡住的名字。
【解决方案2】:

Wikipedia 有一个漂亮的表格,它显示了各种语言的操作符号。在 Python 中它是除数 (26) 的符号,在 Java/C 中是被除数 (-1) 的符号。

【讨论】:

    【解决方案3】:

    它按规定工作。

    合同是这样的

    a == (a/b) * b + (a % b)
    

    并且整数除法向零截断。因此,如果股息为负,则余数为负。

    【讨论】:

      【解决方案4】:

      不确定python,但java中的%运算符返回除法后获得的余数。

      -1%26
      

      分解:

                  26)-1(0
                      0
                      ---
                      -1 ---> Remainder as (-1+0=-1)
      

      【讨论】:

        猜你喜欢
        • 2023-01-26
        • 1970-01-01
        • 2020-05-11
        • 2020-10-19
        • 2014-11-11
        • 2011-04-24
        • 2023-03-08
        • 2020-04-11
        • 2018-08-21
        相关资源
        最近更新 更多