python - Python中指数运算符**的工作
问题描述
我正在运行一个 python 脚本,我正在计算以下内容:
t - 2 ** (j - 1) * l
哪里t = 302536
, j = 6
, l = 0
.
这返回了我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
看起来你想要/期望
t - pow(2, (j - 1) * l)
但反而得到
t - pow(2, j - 1) * l
推荐阅读
- google-cloud-platform - 谷歌云功能价格计算问题
- python - 使用字典时处理错误的 Pythonic 方法
- javascript - 带有 Leaflet 和 Leaflet.GridLayer.GoogleMutant 的 Safari 上不会触发事件上下文菜单
- javascript - Electron fs.writeFile - 多次保存文件时出现问题
- vhdl - 如何在 VHDL 中编写具有输入相关范围的 std_logic_vector 赋值?
- django - 使用 SearchVector 在 PSQL 和 Django 中按主键搜索
- mongodb - 如何从 MERN 中的 mongodb 获取数据
- javascript - 为什么我的 SQL 查询执行缓慢
- c# - 为什么我不能用 NLog 中的事件属性编写?
- r - 读取 1450000 行的 yelp review json 文件和更多行与 R