Visual c++ 1+;1 = 0 ? 我错过了什么!今天编码时间太长了吗( 使用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);

Visual c++ 1+;1 = 0 ? 我错过了什么!今天编码时间太长了吗( 使用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);,visual-c++,visual-studio-2008,console,Visual C++,Visual Studio 2008,Console,当我运行程序时,我得到: 1 + 1 = 0 !!! 我缺少什么?????:“~(您缺少“优先级”。在printf()的最后一个参数中,加法的优先级高于条件值。求和值为 (__int32)1 + (2L == 0) which is 1 + 0, or 1 (which is then promoted to long) 因此,条件解析为 1L ? 0L : 1L 由于“条件”为非假(非零),因此为0L 这似乎是一个简单的运算符优先级问题。我今天显然已经编程太久了:)看起来最后一个0

当我运行程序时,我得到:

1 + 1 = 0 !!!

我缺少什么?????
:“~(

您缺少“优先级”。在printf()的最后一个参数中,加法的优先级高于条件值。求和值为

(__int32)1 + (2L == 0)    which is 1 + 0, or 1 (which is then promoted to long)
因此,条件解析为

1L ? 0L : 1L
由于“条件”为非假(非零),因此为0L


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

看起来最后一个
0L:1L
应该是
1L:0L
。嗯,我想要一个ceil()的就地实现不需要实际使用函数…它应该给出2而不是0对不起,它们只需要在括号中(两部分分别),即printf(“\n\n%d+%d=%d!!!\n\n”,(unsigned u int32)(19L/17L),((19L%17L)==0L)?0L:1L,((unsigned u int32)(19L/17L))+((19L%17L)==0L)?0L:1L));
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));