嵌入式笔试题5

来源:百度知道 编辑:UC知道 时间:2024/06/24 12:47:21
下面的代码输出是什么,为什么?
void foo(void)
{
unsigned int a=6;
int b=-20;
(a+b>6)?printf(">6"):printf("<=6");
}

#include<stdio.h>

void main()
{
unsigned int a=6;
int b=-20;
(a+b>6)?printf(">6"):printf("<=6");
}

在VC上运行结果是:>6

它们在内存中的值是:(16进制表示)
a: 0x00000006
b: 0xffffffec
a+b:0xfffffff2
b+a:0xfffffff2

从上面我们可以看出:
先把int类型的b当成unsinged int类型了,然后再与a进行相加的
显然这种结果是错误的,但编译器就是这么干的!!

没有上机调试这个题,我也不太清楚还有这种情况!

>6