- 无符号整数 unsigned int
对unsigned int进行移位操作时,最高位不会有任何特殊性。
无符号整数必须使用%u来打印
#include <stdio.h>
int main(int argc, char const *argv[])
{
unsigned int a;
a=0xC0000000;
printf("%u %X %d
", a,a,a);
a=a<<1;
printf("%u %X %d
", a,a,a);
a=a>>1;
printf("%u %X %d
", a,a,a);
return 0;
}
结果:
3221225472 C0000000 -1073741824
2147483648 80000000 -2147483648
1073741824 40000000 1073741824
- 有符号整数 int
对int进行移位操作时,必须考虑最高位,向右移位操作相当于 (有符号数值)/2。
#include <stdio.h>
int main(int argc, char const *argv[])
{
int a;
a=0xC0000000;
printf("%u %X %d
", a,a,a);
a=a<<1;
printf("%u %X %d
", a,a,a);
a=a>>1;
printf("%u %X %d
", a,a,a);
return 0;
}
结果:
3221225472 C0000000 -1073741824
2147483648 80000000 -2147483648
3221225472 C0000000 -1073741824