gpt4 book ai didi

c++ - 条件语句的按位与异或

转载 作者:太空狗 更新时间:2023-10-29 20:44:50 25 4
gpt4 key购买 nike

我试图理解这个片段

for (; game->boxes_left > 0; game->turns++)
{
if ( (game->turns & 1) ^ game->computer_first )
game->human_move();
else
game->computer_move();
}

因为 inf game->turns 是一个整数,它具有递增的值(value),而 game->comp_first 是一个 bool 值,谁能告诉我如何 if ( (game->turns & 1) ^ game->computer_first ) 返回 1(真)或 0(假)?因为我理解 & 是按位运算符,当 turns & 1 它总是返回 0 ,因为 turns 是一个递增的值,什么是(game->turns & 1) 在此 if 语句中的功能?有什么办法可以用 java 编写这个片段。提前致谢

最佳答案

随着 game->turns 经历连续的值,它的最后一位在每次迭代中在 0 和 1 之间切换。结果,game->turns & 1 也在 0 和 1 之间。如果 bool 为假,则将结果与 bool 进行异或运算会得到相同的值,如果 bool 为真,则会得到一个反转的值。

game->turns   Last bit   XOR 0    XOR 1
----------- -------- ----- -----
0 0 0 1
1 1 1 0
2 0 0 1
3 1 1 0
4 0 0 1
5 1 1 0

注意当 game->computer_firstfalse 时序列是 0-1-0-1-0-1,而 1-0-1-0-当 game->computer_firsttrue 时为 1-0。

要将此代码段转换为 Java,请比较 game.turns & 1) 的结果:

if (((game.turns & 1) != 0) ^ game->computer_first) ...

关于c++ - 条件语句的按位与异或,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12143065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com