对unsigned int和int进行移位操作的区别

  1. 无符号整数 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
  1. 有符号整数 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
原文地址:https://www.cnblogs.com/catmelo/p/4192605.html