我正在运行一个python脚本,在其中进行以下计算:
t - 2 ** (j - 1) * l
t = 302536
,j = 6
,l = 0
。
这将返回302536
(t
),我无法理解。按照我的说法,结果应该是302535
(t - 1
)。
2 ** (j - 1) * l
的结果为0,而根据我的说法,(j - 1) * l
的结果为0。
这是如何计算的?
答案 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