【问题标题】:Using modulo operator using negative operand [duplicate]使用负操作数的模运算符[重复]
【发布时间】:2020-11-30 22:43:08
【问题描述】:

当我发现在负运算符上使用模运算符会产生不同的输出时,我正在学习 我正在打印 print(-28%10),它给出了输出 2,而 print(28%-10) 给出了输出为 -2,它背后的逻辑是什么,因为 print(28%10) 结果给出了 8,这是实际的余数。有人可以帮我理解吗??

【问题讨论】:

    标签: python operator-keyword modulo modulus


    【解决方案1】:

    您可以将 A%B 运算符视为一种工具: “只要我们找到一个介于 0 和 B 之间的数字,就可以从 A 中添加或减去 B” 即

    -28%10 = 2
    since:
    -28 +10 +10 +10 = 2 # between 0 and 10
    
    28%-10 = -2
    since:
    28 -10 -10 -10 = -2 #between 0 and -10
    28 -10 -10 = 8 #not between 0 and -10
    
    28%10 = 8
    since:
    28 -10 -10 = 8# between 0 and 10
    
    

    【讨论】:

      【解决方案2】:

      % 运算符实际上不是模运算符,而是 python 中的余数运算符。文档对此不是很清楚,但它不遵循负值的正常模逻辑,而是简单地获取余数。

      【讨论】:

        【解决方案3】:

        Guido van Rossum explains 他决定 % 会以这种方式工作,因为这对于某些应用程序很有用,例如,如果您正在使用表示纪元开始前时间点的第二时间戳(1970 年 1 月 1 日) ) 您可以通过 t % 86400 轻松计算天数。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-11-27
          • 2017-01-13
          • 2013-03-10
          • 1970-01-01
          • 2014-06-27
          • 2014-05-26
          相关资源
          最近更新 更多