Chinaunix首页 | 论坛 | 博客
  • 博客访问: 431945
  • 博文数量: 122
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 688
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-04 12:30
文章分类

全部博文(122)

文章存档

2017年(5)

2016年(4)

2015年(56)

2014年(41)

2013年(16)

我的朋友

分类: LINUX

2015-08-28 15:33:29

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

题目一:

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类型来比较

阅读(1023) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~