首页 > 解决方案 > Python中指数运算符**的工作

问题描述

我正在运行一个 python 脚本,我正在计算以下内容:

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

哪里t = 302536, j = 6, l = 0.

这返回了我302536t),我无法理解如何。在我看来,结果应该是302535t - 1)。

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

这是如何计算的?

标签: pythonpow

解决方案


唯一比权力更紧密的东西是括号。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

推荐阅读