1.运行环境VC++ 6.0,先上代码
#include <iostream>using namespace std;int main(void){long long a=~0>>1;unsigned long long b=~0>>1;cout<< a <<" "<< b <<endl;return 0;}编译报了两处错误:error C2632: 'long' followed by 'long' is illegalerror C2632: 'long' followed by 'long' is illegal
2.复制到VS 2010 环境下,编译通过。
#include <iostream>using namespace std;int main(void){long long a=~0>>1;unsigned long long b=~0>>1;unsigned long long c=~0;cout<< a <<" "<< b <<" "<< c << endl;return 0;}执行结果:
补充:
右移动 >> 向右移动 n位
有符号数高位补符号位,无符号数补零(也不一定,和编译器相关,否则不会出现上面b和c值相等的情况)。