**关于c移位操作的奇怪问题(高分征解)**
#include <stdio.h>
#include <iostream>
int main()
{
int a = 33;
long t1 = 1<<a;
long t2 = 1<<33;
printf("t1=%ld, t2=%ld.\n",t1, t2);
//printf("t1=%u, t2=%u.\n",(unsigned)1<<a, (unsigned)1<<32);
system("pause");
return 0;
}
这个程序在32-bit和64-bit机器上的运行结果都是是:t1=2, t2=0.
我认为t2=0合理,拿32-bit机举例子,int是32位,移33位都移没了,所以应该是0.
但运行的实际结果让人很难理解,都是移33位为啥结果大不一样?!