Python-去除按位移位运算符的括号,从而在加法期间产生不同的结果

问题描述 投票:0回答:1

我正在使用Karatsuba算法对乘法进行编码,它需要进行一些移位。简而言之,我需要将此数学表达式转换为编程语句:

mathematical formula for karatsuba

没有任何括号并确认加法(+)优先于按位移位运算符(<,我写了这条语句:

product = (high_part<<m)<<m + middle_part<<m + low_part

对于high_part, middle_part, low_part = 0, 0, 1,给出product = 0。如果计算出正确的答案是2

我用语句中变量的不同顺序得到不同的答案。例如,high_part, middle_part, low_part = 0, 0, 1

product = middle_part<<m + low_part + (high_part<<m)<<m

product = 4

嗯,当我在三个加数之间加上括号时,我得到正确的答案(product = 2):

product = ((high_part<<m)<<m) + (middle_part<<m) + (low_part)

这是优先事项,还是我在这里遗漏了一些奇怪的东西?

python bitwise-operators bit-shift operator-precedence parentheses
1个回答
0
投票

[如果仔细看一下Python documentation on operator precedence,您会看到+<<之前适用(与*+之前适用的方式相同。

© www.soinside.com 2019 - 2024. All rights reserved.