QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 927|回复: 3

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

[复制链接]
发表于 2004-3-4 15:46:23 | 显示全部楼层 |阅读模式
u32 i=32;
temp=0xffffffff<<i;
问这时temp等于多少,大家猜想是0,结果不对,等于0xffffffff,
奇怪只要你把上面的i换成数字32,结果就对了,是0

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

问什么i=32的时候,不能用变量》?
发表于 2004-3-4 22:12:00 | 显示全部楼层
guess:
移动的位数被先或上 0x1f,然后再移位。可以查一下汇编是什么样子的,就知道了
回复

使用道具 举报

 楼主| 发表于 2004-3-5 15:15:34 | 显示全部楼层

搞明白了

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

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

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

使用道具 举报

发表于 2004-3-25 23:13:54 | 显示全部楼层
32位数字嘛
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-9-29 11:37 , Processed in 0.035468 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表