使用VS2008 C ++,控制台应用程序(空,从头开始),将其放在代码中:
printf("\n\n%d + %d = %d !!!\n\n",(unsigned __int32)(19L / 17L),((19L % 17L) == 0L)?0L:1L,(unsigned __int32)(19L / 17L) + ((19L % 17L) == 0L)?0L:1L);
当我运行该程序时,我得到:
1 + 1 = 0 !!!
我错过了什么?????? :'~(
答案 0 :(得分:0)
您缺少'优先级'。在printf()的最后一个参数中,加法的优先级高于条件。总和评估为
(__int32)1 + (2L == 0) which is 1 + 0, or 1 (which is then promoted to long)
因此条件解析为
1L ? 0L : 1L
,因为'条件'是非假的(非零)。
答案 1 :(得分:0)
printf("\n\n%d + %d = %d !!!\n\n",(unsigned __int32)(19L / 17L),((19L % 17L) == 0L)?0L:1L,((unsigned __int32)(19L / 17L)) + (((19L % 17L) == 0L)?0L:1L));
这似乎是运算符优先级的简单问题。我今天肯定编程太久了:))