[英]Modulo in conditional ternary operator
在C ++中,有人编写了以下内容:
player = (player % 2) ? 1 : 2;
根据我的阅读,如果括号中的条件为true,则变量'player'的值将为1,但这似乎不是一个可以为true或false的条件。
如果player
是一个int
或已隐式转换为int
,则在这种情况下,模运算将分别为偶数或奇数返回0
或1
。
从那里, int
隐式转换为bool
,使得0
评估为false
,所有非零值(包括负值)评估为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
,三元之后将被分配为2
,反之亦然。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.