Python - 移除移位运算符周围的括号,在加法期间给出不同的结果

Python - Removing parenthesis around bit-wise shift operators giving different results during addition

我正在使用 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 documentation on operator precedence,您会发现 +<< 之前应用(与 *+ 之前应用的方式相同) .