参考自:https://www.cnblogs.com/jthou/articles/713740.html
用64位编译器可以试试下面这段代码:
int main(int argc, char* argv[])
{
int i, j;
i = 0x0FFF;
j = i>>32;
return 0;
}
你会发现 j 仍然等于0x0FFF,而不是期望中的0。
在编译的时候,编译器会提示(在vc6和gcc4中都一样):“shift count is too large”,或者“right shift count >= width of type”(x86-64)。
在这个程序中到底发生了什么事情呢?我们来看一看这段代码的汇编代码(Debug):
mov WORD PTR [ebp-8], 4095 ;11.3
<