您的位置:首页 > 其它

signed 与 unsigned 比较大小的默认转换

2016-08-02 19:02 2711 查看
      学习c语言的朋友们也许都学到了int型与unsigned int型比较大小的方法。比如以下程序:

#include <stdio.h>
int main()
{
    int a = -1;
    unsigned int b = 1;
    if(a > b){
        printf("a = %d\n",a);
    } else {
        printf("b = %d\n",b);
    }

    return 0;

}

输出结果是: a = -1

    原因在于int 型与unsigned int 型在自己没有进行强制转换的情况下进行比较。int类型在linux下默认情况为signed char类型,a与b比较的时候,a会自动转换成unsigned int类型进行比较。由于signed int的负数最高位是1,转换成unsigned int之后,就会变成一个很大的unsigned int型正数,所以a与b比较时a会大于b。所以会输出a = -1;

    而在遇到char 与 unsigned char 进行比较的时候,情况就不一样了。如一下程序:

#include <stdio.h>
int main()
{
    char a = -1;
    unsigned char b = 1;

    if(a > b){
        printf("a = %x\n",a);
    } else {
        printf("b = %x\n",b);
    }

    return 0; 

}

输出结果为: b = 1

    原因在于char类型在linux下默认是signed char类型。char型与unsigned char型进行比较的时候,发生的默认转换是不同的,与上面恰恰相反。unsigned char会默认转换成signed char类型进行比较。a是存的-1,b转换成signed char也还是1,所以a与b比较时a会小于b。所以会输出b = 1。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unsigned signed 比较