对unsigned int和int进行移位操作的区别
- 无符号整数 unsigned int
对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
- 有符号整数 int
对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
作者:catmelo
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。