移位超过32位会如何?
2025-12-07 22:09:59 / 最新活动#include
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) ,这样前面的就非常好解释了。。。。