看一下下面的代码片段
#include <stdio.h>
#include <stdlib.h>
int main() {
int i = 2;
int x = i << 2 + 1;
printf("%d\n", x);
int y = (i << 2) + 1;
printf("%d\n", y);
return 0;
}
输出结果应该为16,9
因为加法的优先级高于左移,所以i<<2+1其实是i<<3。所以为16
运算操作该用括号用括号,不要带来不必要的麻烦,这种错误比较难以调试