不熟悉的基本C ++代码

时间:2010-12-03 14:24:52

标签: c++

  

可能重复:
  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中任何教科书中较大的章节都会非常有用,或者,当然,这里有一个非常简短的解释。)

感谢。

我对非特定问题标题表示道歉,不知道陌生代码的作用或称之为什么,我想不出更好的方法来表达它。

7 个答案:

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

这是一个条件表达式。

它的工作原理如下:

    评估
  1. (temp.npieces%2)==1。如果temp.npieces为奇数(且大于0),则此表达式为真。
  2. 如果刚评估的值为true,则结果为?之后的第一部分,即1
  3. 否则,结果是最后一部分,即2。
  4. 您可以将此代码视为

    的简写
    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之前有++。