Python中0 - 5 % 2与-5 % 2的差异及符号区分方法
Python取模运算与负号的常见疑问
取模运算符的结果符号始终与第二个操作数相同(或为零)
先看两个Python代码执行结果:
>>> -5 % 2 1
>>> 0 - 5 % 2 -1
这不是负号表示负数和减法的含义不同导致的,核心是运算符优先级和表达式解析规则在起作用:
- 对于
-5 % 2:这里的-是一元负号,用来表示负数-5,Python会直接将其解析为(-5) % 2。按照官方文档的规则,取模结果的符号和第二个操作数(2,正数)一致,所以计算后得到1(本质是-5 = 2*(-3) + 1,余数为正)。 - 对于
0 - 5 % 2:这里的-是二元减法运算符,它的优先级低于取模运算符%,所以Python会先计算5%2得到1,再执行0-1,最终结果为-1。
区分负号的两种用法很简单:
- 当
-是一元负号时,它只作用于单个数值(或括号包裹的表达式),用来表示该值的相反数,比如-3、-(a*2),这种情况下它的优先级和%、*相同,会优先结合数值形成负数,再参与其他运算。 - 当
-是二元减法运算符时,它连接两个独立的操作数,比如x - y,此时它的优先级低于乘法、取模这类运算,必须等两侧的高优先级运算完成后才会执行减法。
如果想强制改变运算顺序,直接用括号明确即可,比如(0-5)%2的结果就和-5%2一样是1。
内容的提问来源于stack exchange,提问作者user8262885
相关产品推荐
相关产品推荐

