无符号数与有符号数比较

先出几个题目,再解释一下为什么答案是那样的。

题目一:

int a = -1;

unsigned int b = 1;

printf("%d", a > b);

结果输出:1

因为无符号数与有符号数比较时,要将有符号数转化为无符号数,再来比较。a转化为无符号数后就是0xFFFFFFFF,肯定大于b

题目二:

char a = -1;

unsigned char b = 1;

printf("%d", a > b);

结果输出:0

奇怪了,怎么会这样?这是因为两者被转化为int了,a转化为int就表示-1,b转化为int 就是1,前者小于后者。注意了这里不是像题目一里一样简单的把char转化为unsigned char了

题目三:

int a = -1;

unsigned char b = -1;

printf("%d\n", a < b);

结果输出是:1

原因在于要把b转化为int就是0xFF当然大于-1了

题目四:

char a = -1;

unsigned int b = -1;

printf("%d\n", a == b);

结果输出:1

原因是char类型被扩展为unsigned int后与b相等,同为0xFFFFFFFF

 

下面给出我个人得出的一些结论:

无符号int与有符号int比较大小,转化为无符号int来比较

int类型与非无符号int的类型比较时,非无符号int的类型转化为int来比较

无符号int类型与其他类型如unsigned short,signed short,unsigned char, char 比较时,其他类型一律转化为无符号int类型来比较

非无符号int类型和非int类型如unsigned short,signed short,unsigned char, char 比较时,一律转化为int类型来比较

 

  • 8
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值