int a=1,b=2,c=3;
a<<2+b<<3+c<<2;
我开始认为下面的表达式等于a乘以4,加上b乘以8,加上c乘以4,等于4+16+12=32
但是其实由于加减乘除的优先级比位运算的优先级高,所以会先算加减乘除,然后再算位运算,于是会把①②两部分先算出来:
然后就变成a<<4<<6<<2,所以最后的结果是2的12次方1024*4=4096
要想达到最开始我们想要的结果,就需要加入括号:
int a=1,b=2,c=3;
(a<<2)+(b<<3)+(c<<2);
这样就会先算括号里面的位运算,然后再算加法