【发布时间】:2020-11-30 22:43:08
【问题描述】:
当我发现在负运算符上使用模运算符会产生不同的输出时,我正在学习 我正在打印 print(-28%10),它给出了输出 2,而 print(28%-10) 给出了输出为 -2,它背后的逻辑是什么,因为 print(28%10) 结果给出了 8,这是实际的余数。有人可以帮我理解吗??
【问题讨论】:
标签: python operator-keyword modulo modulus
当我发现在负运算符上使用模运算符会产生不同的输出时,我正在学习 我正在打印 print(-28%10),它给出了输出 2,而 print(28%-10) 给出了输出为 -2,它背后的逻辑是什么,因为 print(28%10) 结果给出了 8,这是实际的余数。有人可以帮我理解吗??
【问题讨论】:
标签: python operator-keyword modulo modulus
您可以将 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
【讨论】:
% 运算符实际上不是模运算符,而是 python 中的余数运算符。文档对此不是很清楚,但它不遵循负值的正常模逻辑,而是简单地获取余数。
【讨论】:
Guido van Rossum explains 他决定 % 会以这种方式工作,因为这对于某些应用程序很有用,例如,如果您正在使用表示纪元开始前时间点的第二时间戳(1970 年 1 月 1 日) ) 您可以通过 t % 86400 轻松计算天数。
【讨论】: