注意避免移位多大

下面的程序表示的是将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上

你可能感兴趣的:(移位)