C++位运算符&^含义及(depth & 1u) ^ 1u等代码逻辑咨询
问题1:return (depth & 1u) ^ 1u; 这行代码的含义是什么?
这行是is_max_node()方法的返回逻辑,作用是判断当前博弈树节点是不是极大值节点:
depth & 1u是按位与操作,取depth二进制的最低位,用来判断深度的奇偶性:结果为1说明depth是奇数,为0说明是偶数^ 1u是按位异或1操作,等价于把前面得到的最低位结果取反
所以最终逻辑就是:当节点深度为偶数时返回true(是极大节点),深度为奇数时返回false(是极小节点),完全符合极小极大博弈树的节点分层规则。
问题2:board[cntX][cntY] = (depth & 1u) ? 'B' : 'W'; 这行代码的作用是什么?
这行是给当前落子位置赋值对应棋子:
- 同样用
depth & 1u判断深度奇偶性:如果深度是奇数,就给坐标(cntX, cntY)的棋盘位置赋值黑棋标识'B';如果深度是偶数,赋值白棋标识'W'
结合构造函数逻辑,子节点深度是父节点+1,刚好对应双方交替落子的规则,符合五子棋这类回合制博弈的逻辑。
问题3:上述代码中的&和^是不是分别代表逻辑与、逻辑或?
不是。这两个都是位运算符:
&是按位与运算符,不是逻辑与(C++的逻辑与是&&)^是按位异或运算符,不是逻辑或(C++的逻辑或是||)
位运算符是对变量的每一位二进制位分别做运算,和整体布尔值判断的逻辑运算符作用完全不同。
内容的提问来源于stack exchange,提问作者CkCool
相关产品推荐
相关产品推荐

