下列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);
阅读(1087) | 评论(0) | 转发(0) |