注册 登录
编程论坛 C语言论坛

C语言基础题,求助

拾柒17 发布于 2019-08-08 16:11, 2026 次点击
void foo(void)
{
   unsigned int a=6;
   int b=-20;
   (a+b>6)?puts(">6"):puts("<=6");//put为打印函数
}
问代码输出是什么?
我不太懂的地方是答案说:
  输出值是“>6”。因为a+b这里做了隐式的转换,把int转化为unsigned int.编译器就会把b当作一个很大的正数。
3 回复
#2
rjsp2019-08-08 16:30
首先你觉得 unsigned int + signed int 的结果应当是什么类型?
不管你怎么回答,都得存在类型提升的情况。假设你的回答是“结果是TYPE类型”的话,要么得将unsigned int转化为TYPE类型,要么得将signed int转化为TYPE类型,甚至有可能两者都需要转换。

打开 https://zh.
然后看其中的“整数提升”那节
#3
wufuzhang2019-08-08 16:38
回复 楼主 拾柒17
下面这个帖子的楼主遇到跟你一样的问题。
https://bbs.bccn.net/viewthread.php?tid=495997&page=1#pid2706271

这个帖子里面他提了两个问题,5楼才是你想看的结果。
#4
拾柒172019-08-11 10:40
回复 2楼 rjsp
学习到了,收货满满,谢谢
1