C++移位操作对int型和unsigned int型数据的影响不同,具体测试如下
Linux环境,GCC编译
/*************************************************************************
> File Name: test.cpp
> Author: Shorey
> Mail: shoreybupt@gmail.com
> Created Time: 2014年11月26日 星期三 16时45分50秒
************************************************************************/
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
using namespace std;
int main()
{
int a = 0x80000000,c = 0x40000000;
unsigned int b = 0x80000000;
printf("0x%X\n",a>>1);
printf("0x%X\n",b>>1);
printf("0x%X\n",c>>1);
printf("0x%X\n",a<<1);
printf("0x%X\n",b<<1);
printf("0x%X\n",c<<1);
return 0;
}
结果:
0xC0000000
0x40000000
0x20000000
0x0
0x0
0x80000000
可见右移后,int型变量最高位按原值补齐,unsigned int最高位用0补齐!