Python中指数运算符**的工作

时间:2018-11-21 11:54:46

标签: python pow

我正在运行一个python脚本,在其中进行以下计算:

t - 2 ** (j - 1) * l

t = 302536j = 6l = 0

这将返回302536t),我无法理解。按照我的说法,结果应该是302535t - 1)。

2 ** (j - 1) * l的结果为0,而根据我的说法,(j - 1) * l的结果为0。

这是如何计算的?

1 个答案:

答案 0 :(得分:3)

唯一比力量绑定更紧密的是括号。 Python(以及我所见过的本机支持幂运算符的其他所有语言)都遵循此算法的算术惯例,因此您无需记住不同的冲突规则集。您的操作可以显式重写如下:

t - ((2 ** (j - 1)) * l)

正如您所指出的那样,设置l = 0会丢弃很多计算。只是它会丢弃t本身以外的所有内容。

您可以通过使用幂运算符的函数形式使这些内容明确。以下任何导入均适用于以下示例:

from math import pow
from operator import pow
from operator import __pow__ as pow
from numpy import pow

似乎您想要/期望

t - pow(2, (j - 1) * l)

但是得到了

t - pow(2, j - 1) * l