移位超过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) ,这样前面的就非常好解释了。。。。