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