我在学习时发现,在负运算符上使用模运算符会产生不同的输出我打印的是print(-28%10(,它给出了输出2,print(28%-10(给出了输出-2,这背后的逻辑是什么,print(28%10(给出的结果是8,这是实际的余数。有人能帮我理解吗??
您可以将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解释说,他决定%
将以这种方式工作,因为这对某些应用程序很有用,例如,如果您使用第二个时间戳来表示历元开始前的时间点(1970年1月1日(,则可以通过执行t % 86400
来轻松计算天数。