我正在使用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,您会看到+
在<<
之前适用(与*
在+
之前适用的方式相同。