我正在读一篇关于Java pacman游戏的教程。
下面是有问题的代码。
if (pacmanx % blocksize == 0 && pacmany % blocksize == 0) {
pos = // integer
ch = screendata[pos];
if ((ch & 16) != 0) { // do not understand this.
screendata[pos] = (short)(ch & 15);
...
}我不是真的理解单音&。我知道这个操作数检查if语句的两边,或者是一个按位运算符。然而,根据下面的测试,似乎也不是这样:
if I was to test (ch = 18):
(ch & 16) = 16
(ch & 8) = 0
(ch & 2) = 2谢谢
发布于 2012-09-18 16:32:45
&是bitwise operator,并且:
18 = 10010
16 = 10000
----------
16 = 10000
18 = 10010
8 = 01000
----------
0 = 00000因此if将检查第五位是1还是0。
发布于 2012-09-18 16:33:03
The single & it's a bitwise AND.它是对数字的单个位执行的and操作。
考虑一下你的短片的一种可能的位表示:
10011011 & : screendata[pos]
00010000 = : 16
----------
10010000特别是这一行:
if ((ch & 16) != 0) {检查数字的第5位(2^ (5 -1))是否设置为1(不同于0)。
发布于 2012-09-18 16:34:51
这不是一个布尔and,它总是&&;相反,它是一个按位and。它正在检查是否在ch中设置了右起第五位。
ch = 18 // ch = 0b00010100
ch & 16 // 16 = 0b00010000
// ch & 16 = 0b00010000 != 0
ch & 8 // 8 = 0b00001000
// ch & 8 = 0b00000000 == 0
ch & 2 // 2 = 0b00000010
// ch & 2 = 0b00000010 != 0https://stackoverflow.com/questions/12473131
复制相似问题