Chinaunix首页 | 论坛 | 博客
  • 博客访问: 646479
  • 博文数量: 139
  • 博客积分: 2655
  • 博客等级: 少校
  • 技术积分: 1723
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-02 16:03
文章分类

全部博文(139)

文章存档

2013年(2)

2011年(17)

2010年(14)

2009年(86)

2008年(20)

分类:

2009-08-23 00:20:23

下列c程序片段输出什么?
unsigned char i=255;
printf("i=%d\n",(i+1)>i?(i+1):i);
(a)i=256  (b)i=0 (c)i=255
这是我今天写的程序的其中两句输出,结果不是我想要的。如果刚学C那会或者想当然,是会得到正确答案的,但是分析未必正确. 答案确是a.看着输出i=256,当初我以为自己哪里搞错了.抽出这两句重新编译依旧是这样。

想了半天才发现原来(i+1)>i是"正常"比较的,或者说是i+1提升为"较高"的类型int后才比较的,而不是i+1转换成unsigned char后的0>255比较,虽然i为unsigned char. 所以最后输出i=256.无论i+1>i正确与否,最后整个表达式的类型是由(i+1)的类型int决定的

以下得到"正确"结果i=255
printf("i=%d\n",(unsigned char)(i+1)>i?(i+1):i);


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