http://topic.youkuaiyun.com/u/20090526/11/c3afa298-8223-444c-9fe3-59661c4f6ddf.html
显示的是一个负数,但将int iDst = 1 < < (iPos + iInc);改为int iDst = 1 < < (-1);的时候,将会显示:0
同样是1 < < -1 ,为什么会不同的呢?
编译器只进行32以内的移位(也就是寄存器的后五位的值),-1是0xFFFFFFFE,为非法值,因此编译期,编译器就将结果置零。
而未优化的情况下,1 << var 不被编译器计算出 var 值,则取寄存器的后五位进行移位……运行期操作。