为什么按位操作返回30而不是384?

问题描述:

我正在使用Dev-C++编译器。这个程序应该打印30,但它的打印384为什么按位操作返回30而不是384?

#include <stdio.h> 

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

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

    getch(); 
    return 0; 
} 
+3

参见[运算符优先级(http://en.cppreference.com/w/cpp/language/operator_precedence) – harold

+0

有谁知道Dev-C++是否提供纯C模式?如果没有,C标签可能应该改为C++。 –

+1

Dev C++只是一个老版本的Mingw/GCC/G ++的IDE(过时)。如果我没有记错,它会根据文件扩展名.c或.cpp选择语言。 – Lundin

的问题是,+操作符比<<运营商更高的优先级。什么,你居然写的意思是:

ans = n << (3 + n) << 1; 

你真正想要的是:

ans = (n<<3) + (n<<1);