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

1 + 1 = 0 ? What am I missing! Have been coding for too long today? :(

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

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

你不见了'precedence'。在 printf() 的最后一个参数中,加法的优先级高于条件。总和计算为

(__int32)1 + (2L == 0)    which is 1 + 0, or 1 (which is then promoted to long)

因此条件解析为

1L ? 0L : 1L

这是 0L,因为 'condition' 是非假(非零)。

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

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