1. 无符号整数

对unsigned int进行移位操作时,最高位不会有任何特殊性。

无符号整数必须使用%u来打印

#include <stdio.h>

int main(int argc, char const *argv[])
{
unsigned int a; a=0xC0000000;
printf("%u %X %d\n", a,a,a);
a=a<<1;
printf("%u %X %d\n", a,a,a);
a=a>>1;
printf("%u %X %d\n", a,a,a); return 0;
}

结果:

3221225472 C0000000 -1073741824
2147483648 80000000 -2147483648
1073741824 40000000 1073741824
  1. 有符号整数

对int进行移位操作时,必须考虑最高位,向右移位操作相当于 (有符号数值)/2。

#include <stdio.h>

int main(int argc, char const *argv[])
{
int a; a=0xC0000000;
printf("%u %X %d\n", a,a,a);
a=a<<1;
printf("%u %X %d\n", a,a,a);
a=a>>1;
printf("%u %X %d\n", a,a,a); return 0;
}

结果:

3221225472 C0000000 -1073741824
2147483648 80000000 -2147483648
3221225472 C0000000 -1073741824
05-11 15:53