可能重复:
What does '?' do in C++?
xo = ((temp.npieces%2)==1)? 1 : 2;
我无法弄清楚这意味着什么。
xo是一个整数(我想简单地确定零和十字之间的差异)
temp是一个位置的实例,它存储有关naughts和crosses board的信息(naughts和crosses的棋盘上的位置,游戏的状态(即它是否已被赢,输或未决),以及到目前为止放在板上的件数
npieces存储到目前为止放置的件数
%2显然确定npieces的剩余部分除以2,以确定这是奇数还是偶数,从而确定naughts或crosses是否接下来
最后的那篇文章让我感到困惑,? 1 : 2
位,我确信我之前已经看过这个或类似的东西了,但我担心我不确定这是做什么的。我知道这可能是非常基本的东西,但我在大学的第一年(我现在已经是我的第二年)病得很重,并且错过了奇怪的片段,所以我的随机性,通常是令人尴尬的,我知道的差距。
(这是我正在进行的任务的大量代码的一部分 - 尝试理解几百行代码,包括这些。由于这是一项任务,我更多我很高兴不被告知这条线的确切含义 - 实际上只是指向解释? 1 : 2
的资源的方向,以便我可以为自己解决这个问题。无论是在线资源,还是Safari Books Online中任何教科书中较大的章节都会非常有用,或者,当然,这里有一个非常简短的解释。)
感谢。
我对非特定问题标题表示道歉,不知道陌生代码的作用或称之为什么,我想不出更好的方法来表达它。
答案 0 :(得分:7)
xo = ((temp.npieces%2)==1)? 1 : 2;
如果temp.npieces
为偶数(因此除数余数为0)xo现在等于2
其他明智的xo现在等于1;
编辑:它不会检查它是否为奇数,它会检查余数是否为正。
X ? A : B
是另一种写作方式
if(X)
{
A
}else
{
B
}
Edit2:
条件运算符的目的不是更快,更简单。条件运算符返回一个值。 if
没有。这是主要的区别。 Therefore x ? A : B isn't exactly the same as if( x ) { A; } else { B; }
Credit @ John Dibling
in C如果不等于0,则为某事。(即使它是-145)
答案 1 :(得分:5)
bool ? 1 : 2
称为ternary operator。如果bool
为真,则返回1
,否则返回2
。
答案 2 :(得分:2)
答案 3 :(得分:2)
xo = ((temp.npieces%2)==1)? 1 : 2;
相当于:
if((temp.npieces%2) == 1)
xo = 1;
else
xo = 2;
答案 4 :(得分:2)
这是一个条件表达式。
它的工作原理如下:
(temp.npieces%2)==1
。如果temp.npieces为奇数(且大于0),则此表达式为真。true
,则结果为?
之后的第一部分,即1 您可以将此代码视为
的简写if ((temp.npieces%2)==1)
xo = 1;
else
xo = 2;
请注意,如果(temp.npieces%2)==1
为奇数,则条件temp.npieces
会不。对于temp.npieces
的负值,我们有(temp.npieces%2)==-1
。因此,如果temp.npieces
未签名,则此代码可能存在问题。
答案 5 :(得分:1)
读它:
if ((temp.npieces%2)==1))
xo = 1;
else
xo = 2;
如果npieces是奇数影响1到xo否则影响2
答案 6 :(得分:1)
您正在寻找三元运营商。形式的东西
variable = condition ? value-if-true : value-if-false
是
之类的简写if (condition) variable = value-if-true else variable = value-if-false
当temp.npieces为奇数时,((temp.npieces%2)== 1)将成为真。
它确实具有秘密解码器环的感觉,但是三元运算符已经存在,因为C之前有++。