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

C99标准:如果int能够表示原始类型中的所有数值,那么这个数值就被转成int型,否则,它被转成unsigned int型。这种规则被称为整型提升。所有其它类型都不会被整型提升改变。

 

学习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 int类型进行比较,所以a与b比较的时候,a会自动转换成unsigned int类型进行比较。由于signed int的符号位最高位是1,转换成unsigned int之后,就会变成一个很大的unsigned int型正数,所以a与b比较时a会大于b。所以会输出a = -1;

 

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

 

#include <stdio.h>

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值