移位超过32位会如何?

#include <stdio.h>

int main (void)
{
        int i = 0xFFFFFFFF;

        __asm        {
                push               eax;
                mov                eax,i;
                sal                eax,31;
                sal                eax,1;
                mov                i,eax;
                pop                eax;
        };
        printf ( "0x%0X \n",i );
        i = 0xFFFFFFFF;

        __asm        {
                push               eax;
                mov                eax,i;
                sal                eax,32;
                mov                i,eax;
                pop                eax;
        };

        printf ( "0x%0X \n",i );
        return (0);
}
 
为什么先移位  31,再移位1位,就可以达到全部移出32位的目的呢?
为什么直接移位32位,却达不到目的呢??
 
其实是很简单,因为移位操作,移位的位数,会进行一个mask (&0x1F)操作,这是微指令做的,就是 cl & 0x1F,相当于 cl – 32 (cl > 31) ,
这样前面的就非常好解释了。。。。
 
 
posted @ 2013-10-18 12:06  moon_cat  Views(1048)  Comments(0Edit  收藏  举报