S.l.e!ep.¢%

像打了激速一样,以四倍的速度运转,开心的工作
简单、开放、平等的公司文化;尊重个性、自由与个人价值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理
12 . 下面的代码输出是什么,为什么?

void foo(void)
{
unsigned int a = 6;
int b = -20;
(a+b > 6) puts("> 6") : puts("<= 6");
}

这个问题测试你是否懂得 C 语言中的整数自动转换原则,我发现有些开发者懂得极少这些东西。不管如何,这无符号整型问题的答案是输出是 “>6” 。原因是当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。 因此 -20 变成了一个非常大的正整数,所以该表达式计算出的结果大于 6 。这一点对于应当频繁用到无符号数据类型的嵌入式系统来说是丰常重要的。如果你答错了这个问题,你也就到了得不到这份工作的边缘。

Feedback

# re: 当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型  回复  更多评论   

2011-01-20 19:19 by wifecooky
当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型

————————————
上面这种描述是错误的。。。
当表达式中存在有符号类型和无符号类型时,计算的结果将转换为无符号类型。

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理