读书人

c程序基础

发布时间: 2012-09-22 21:54:54 作者: rapoo

c程序基础求助
void main()
{
int a=2;
int b=5;
printf("%d",4+(a)>(b)?(a):(b));
}

运行之后输出结果为什么是2而不是6

[解决办法]
4+2=6 > 5---> 2
[解决办法]
printf("%d",4+(a>b?a:b));

注意符号优先级, 如果搞不清楚就明确的加括号.
[解决办法]
int a=2;
int b=5;
printf("%d\n",4+((a)>(b)?(a):(b)) );//这是9,这里求的是4+ (a和b的最大值)

int a=2;
int b=5;
printf("%d\n",4+(a)>(b)?(a):(b) );是2,这里先计算了(4+a),最后返回的是a=2
================================================
12: int a=2;
0040D728 mov dword ptr [ebp-4],2
13: int b=5;
0040D72F mov dword ptr [ebp-8],5
14: printf("%d\n",4+(a)>(b)?(a):(b));
0040D736 mov eax,dword ptr [ebp-4]
0040D739 add eax,4
0040D73C cmp eax,dword ptr [ebp-8]
0040D73F jle main+39h (0040d749)

[解决办法]
12: int a=2;
0040D728 mov dword ptr [ebp-4],2
13: int b=5;
0040D72F mov dword ptr [ebp-8],5
14: printf("%d\n",4+(a)>(b)?(a):(b));
0040D736 mov eax,dword ptr [ebp-4]
0040D739 add eax,4
[解决办法]

探讨

int a=2;
int b=5;
printf("%d\n",4+((a)>(b)?(a):(b)) );//这是9,这里求的是4+ (a和b的最大值)

int a=2;
int b=5;
printf("%d\n",4+(a)>(b)?(a):(b) );是2,这里先计算了(4+a),最后返回的是a=2
===================================……

[解决办法]
探讨
printf("%d",4+(a>b?a:b));

注意符号优先级, 如果搞不清楚就明确的加括号.

[解决办法]
算数运算符>关系运算符>逻辑运算符>条件运算符
[解决办法]
如果像三楼说的:
printf("%d",4+(a>b?a:b));
注意符号优先级, 如果搞不清楚就明确的加括号.
那么就应该输出 9吧···

探讨

算数运算符>关系运算符>逻辑运算符>条件运算符

[解决办法]
探讨

算数运算符>关系运算符>逻辑运算符>条件运算符

[解决办法]
4+(a)>(b)整个都是问号前面的表达式
[解决办法]
a+4 只是产生临时量和b比较,a的值是没有变的。
就像a+4和 a+=4是不一样的!

读书人网 >C语言

热点推荐