C 为什么按位操作返回30而不是384?
我正在使用Dev-C++编译器。本程序应打印C 为什么按位操作返回30而不是384?,c,bitwise-operators,dev-c++,C,Bitwise Operators,Dev C++,我正在使用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; } #包括 int main(){ int n=3; INTANS; ANS= N< P>问题是代码> +>代码>操作符比有
30
,但其打印384
#include <stdio.h>
int main() {
int n = 3;
int ans;
ans = n<<3 + n<<1;
printf("%d", ans);
getch();
return 0;
}
#包括
int main(){
int n=3;
INTANS;
ANS= N< P>问题是<>代码> +>代码>操作符比有更高的优先级。有人知道DEV-C++是否提供了纯C模式?如果不是,C标签应该可能被更改为C++。IDE是一个旧版本Mingw/GCC/G++。如果我没记错的话,它选择了基于文件扩展名.c或.cpp的语言。@user3745158请注意,int
是一个有符号类型,对有符号类型执行移位操作没有任何意义。你应该将它切换到uint32\u t
或类似的语言。@Lundin为什么不这样做有意义吗?只要你知道输出是什么,对我来说似乎很好。我认为对一个小于10的整数执行小于4的两个移位是完全没有问题的。
ans = n << (3 + n) << 1;
ans = (n<<3) + (n<<1);