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));
这似乎是一个简单的运算符优先级问题。我今天肯定编程太久了:)
使用 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));
这似乎是一个简单的运算符优先级问题。我今天肯定编程太久了:)