Java中&运算符的用途解析:以吃豆人教程代码为例
位运算符&在Pacman代码中的作用解释
这里的&不是你熟悉的逻辑运算符,而是按位与运算符,和&&(短路逻辑与)是完全不同的两种操作,别搞混了。下面拆解代码里的两处&:
ch & 16的作用:
16的二进制是10000,按位与操作会逐位对比ch和16的二进制位:只有当对应位都为1时,结果的该位才是1,否则为0。这里用它来检查ch的第5位(从0开始计数)是否为1——如果结果不等于0,就说明该位是1,触发if分支的逻辑。
举个例子:如果ch=24(二进制11000),24&16=16≠0,满足条件;如果ch=8(二进制01000),8&16=0,不满足条件。ch & 15的作用:
15的二进制是01111,按位与操作会把ch的高位全部清零,只保留低4位的数值。这相当于对ch取模16(当ch为非负数时),但位运算的执行效率比模运算更高,这在早期游戏(比如Pacman)的性能优化中很常见。
举个例子:如果ch=24(二进制11000),24&15=8;如果ch=31(二进制11111),31&15=15。
至于为什么不用&&?因为这里根本不是布尔值的逻辑判断场景,&&是用来连接两个布尔表达式的,而这里是对整数的二进制位进行操作,&&完全不适用。
内容的提问来源于stack exchange,提问作者Smile D
相关产品推荐
相关产品推荐

