Python中`0--3//2`与`--3//2`运算结果存在差异的原因是什么?
问题原理说明
这个差异本质是Python中一元负号运算符和二元减法运算符的优先级、语义不同导致的,两个表达式的运算顺序拆解如下:
1. --3//2 运算逻辑
连续的两个-都属于优先级最高的一元负号运算符,优先级高于//整除运算,运算顺序为:
- 第一步:计算内层一元负号
-3→ 得到结果-3 - 第二步:计算外层一元负号
-(-3)→ 得到结果3 - 第三步:计算整除
3//2→ 得到结果1
和你之前的推测完全一致。
2. 0--3//2 运算逻辑
开头的0之后的第一个-属于二元减法运算符(表示两个数相减),优先级低于一元负号和整除运算,运算顺序为:
- 第一步:计算优先级最高的一元负号
-3→ 得到结果-3 - 第二步:计算优先级次高的整除
-3//2→ 得到结果-2 - 第三步:计算二元减法
0 - (-2)→ 得到结果2
就是你观察到的正确向上取整结果。
无math模块的通用取整方案
如果需要兼容正负整数的取整需求,可以直接用下面的写法:
- 向下取整:
a // b - 向上取整:
(a + b - 1) // b(正整数场景),或0 - (-a // b)(全整数场景)
内容的提问来源于stack exchange,提问作者Karl
相关产品推荐
相关产品推荐

