为什么这个按位运算返回30而不是384?

Shy*_*yam 4 c dev-c++ bitwise-operators

我正在使用Dev-C++编译器.这个程序应该打印30但是它的打印384.

#include <stdio.h>

int main() {
    int n = 3;
    int ans;

    ans = n<<3 + n<<1;
    printf("%d", ans);

    getch();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Rud*_*ela 9

问题是+运营商的优先级高于<<运营商.你写的实际上意味着:

ans = n << (3 + n) << 1;
Run Code Online (Sandbox Code Playgroud)

你真正想要的是:

ans = (n<<3) + (n<<1);
Run Code Online (Sandbox Code Playgroud)