python 中<<和**2 为什么用起来不一样

rt,在做一道算法题时更改了一处地方,结果就不同了

1----return max(dp(i+1,j,num,dep+1)+int(num[i])*2**dep,dp(i,j-1,num,dep+1)+int(num[j])*2**dep)
2----return max(dp(i+1,j,num,dep+1)+int(num[i])<<dep,dp(i,j-1,num,dep+1)+int(num[j])<<dep)

1的结果是494
2的结果是84
但是这两种用法应该是一样的才对,求解

img

位运算的优先级比加号低,所以先计算加法,再把结果位运算。
而乘方的优先级比加号和乘号高,所以先计算乘方。
两者运算顺序不同,结果自然不同