li2002708 发表于 2004-3-4 15:46:23

奇怪的现象,谁能解释啊?

u32 i=32;
temp=0xffffffff<<i;
问这时temp等于多少,大家猜想是0,结果不对,等于0xffffffff,
奇怪只要你把上面的i换成数字32,结果就对了,是0

另外i=0,.....31,结果都是对的,不用换成数字

问什么i=32的时候,不能用变量》?

zhiwood 发表于 2004-3-4 22:12:00

guess:
移动的位数被先或上 0x1f,然后再移位。可以查一下汇编是什么样子的,就知道了

li2002708 发表于 2004-3-5 15:15:34

搞明白了

如果是变量i的时候,先把变量imod 32,然后移位,所以32 和0 是结果一样的,都没有移动

如果是数字32,33,34,这时候,编译程序,就不会把这个数字mod32,而是真是的移动,即使移动1000位

我怀疑,编译程序在编译的时候用mod进行优化

DexterK 发表于 2004-3-25 23:13:54

32位数字嘛
页: [1]
查看完整版本: 奇怪的现象,谁能解释啊?