1 + 1 = 0?我错过了什么!今天编码太久了? :(

时间:2016-07-12 20:24:54

标签: visual-c++ visual-studio-2008 console

使用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 !!!

我错过了什么?????? :'~(

2 个答案:

答案 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));

这似乎是运算符优先级的简单问题。我今天肯定编程太久了:))