下面的程序表示的是将1左移32位的结果。 #include<stdio.h> int main() { unsigned int w=32; printf("%x\n",1U<<w); return 0; } 在不进行优化时变为1,在进行优化后则变为0 gcc feng.c ./a,out 1 /////////// gcc -O2 feng.c ./a.out 0 理由:在上述不执行优化的编译结果中,实际上使用了sall命令,sall命令只能在位移宽低于5bit的情况中可见,低于5Bit也就是只能表示从0到31,32则会被是为与0等价。 这是许久前在linux编译的结果,目前在QT下,编译 通过修改project.pro 添加优化选项: CONFIG -= app_bundle -O3 (-O2) 得到的是1,没有任何的变化,QT安装在Windows上