12 . 下面的代码输出是什么,为什么?
<span style="font-size:18px;">void foo(void)
{
unsigned int a = 6;
int b = -20;
(a+b > 6) puts("> 6") : puts("<= 6");
}</span>
这个问题测试你是否懂得 C 语言中的整数自动转换原则,我发现有些开发者懂得极少这些东西。不管如何,这无符号整型问题的答案是输出是 “>6” 。原因是当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。 因此 -20 变成了一个非常大的正整数,所以该表达式计算出的结果大于 6 。这一点对于应当频繁用到无符号数据类型的嵌入式系统来说是丰常重要的。
一道题引出的相关内容:
本文探讨了C语言中无符号整数与有符号整数混合运算时的自动转换原则,解释了为何-20与6相加后会大于6,并介绍了原码、反码、补码的概念。
5738

被折叠的 条评论
为什么被折叠?



