我正在使用Karatsuba算法编码乘法,它需要一些移位。简而言之,我需要将此数学表达式转换为编程语句:
没有任何括号并确认加法(+)优先于按位移位运算符(,我编写了以下语句:
product = (high_part<<m)<<m + middle_part<<m + low_part
对于high_part,middle_part,low_part = 0,1
,这得到product = 0
。如果计算得出的正确答案是 2 。
对于语句中变量的不同顺序,我得到不同的答案。例如,high_part,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)
这是优先事项吗?还是我在这里遗漏了一些奇怪的东西?