指数运算符 ** 在 Python 中的工作
working of exponential operator ** in Python
我是 运行 一个 python 脚本,我正在计算以下内容:
t - 2 ** (j - 1) * l
其中 t = 302536
, j = 6
, l = 0
.
这个returns我302536
(t
),我怎么也看不懂。按照我的说法,结果应该是 302535
(t - 1
).
2 ** (j - 1) * l
结果为 0,根据我的说法应该是 1,因为 (j - 1) * l
结果是 0.
这是如何计算的?
唯一比权力更紧密的是括号。 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
好像你wanted/expected
t - pow(2, (j - 1) * l)
反而得到了
t - pow(2, j - 1) * l
我是 运行 一个 python 脚本,我正在计算以下内容:
t - 2 ** (j - 1) * l
其中 t = 302536
, j = 6
, l = 0
.
这个returns我302536
(t
),我怎么也看不懂。按照我的说法,结果应该是 302535
(t - 1
).
2 ** (j - 1) * l
结果为 0,根据我的说法应该是 1,因为 (j - 1) * l
结果是 0.
这是如何计算的?
唯一比权力更紧密的是括号。 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
好像你wanted/expected
t - pow(2, (j - 1) * l)
反而得到了
t - pow(2, j - 1) * l