奇怪的现象,谁能解释啊?
u32 i=32;temp=0xffffffff<<i;
问这时temp等于多少,大家猜想是0,结果不对,等于0xffffffff,
奇怪只要你把上面的i换成数字32,结果就对了,是0
另外i=0,.....31,结果都是对的,不用换成数字
问什么i=32的时候,不能用变量》? guess:
移动的位数被先或上 0x1f,然后再移位。可以查一下汇编是什么样子的,就知道了
搞明白了
如果是变量i的时候,先把变量imod 32,然后移位,所以32 和0 是结果一样的,都没有移动如果是数字32,33,34,这时候,编译程序,就不会把这个数字mod32,而是真是的移动,即使移动1000位
我怀疑,编译程序在编译的时候用mod进行优化 32位数字嘛
页:
[1]