条件三元运算符中的模

时间:2014-10-28 21:50:47

标签: c++

在C ++中,有人写了以下内容:

player = (player % 2) ? 1 : 2;

从我所读到的,如果parantheses中的条件为真,变量'player'将评估为1,但这似乎不是一个可能是真或假的条件。

1 个答案:

答案 0 :(得分:3)

如果playerint或隐式转换为int,那么模数操作将返回01,在这种情况下分别是偶数或奇数。

从那里,int隐式转换为bool0评估为false,所有非零值(包括负值)评估为{{ 1}}。

示例

开始
true

我们可以一步一步地遵循三元表达式

player = 2;

但是,我认为这种逻辑是有缺陷的,它们可能意味着

player = (player % 2) ? 1 : 2;
player = (2 % 2) ? 1 : 2;
player = 0 ? 1 : 2;  // 0 evaluates to false
player = 2;

这确实会"切换"交替方式的玩家,意味着player = (player % 2) ? 2 : 1; 最初player时,在三元之后,它将被分配1,反之亦然。