我正在阅读有关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);
...
}
我并不是真的了解单身&amp ;.我理解这个操作数检查if语句的两侧,或者是一个按位运算符。但是,根据以下测试,它似乎不是:
if I was to test (ch = 18):
(ch & 16) = 16
(ch & 8) = 0
(ch & 2) = 2
感谢
答案 0 :(得分:8)
&
是bitwise operator AND:
18 = 10010
16 = 10000
----------
16 = 10000
18 = 10010
8 = 01000
----------
0 = 00000
因此if
将检查第五位是1还是0。
答案 1 :(得分:2)
单&
它是bitwise AND
。这是对您的号码的个别位执行的操作。
考虑您的短片的可能位代表:
10011011 & : screendata[pos]
00010000 = : 16
----------
10010000
特别是这一行:
if ((ch & 16) != 0) {
检查你的号码的第5位(2 ^(5 -1))是否设置为1(不同于0)。
答案 2 :(得分:2)
这不是布尔值,总是&&
;相反,它是一个按位和。它正在检查右侧的第5位是否设置在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 != 0
答案 3 :(得分:0)
给定ch = 18
(ch & 16) = 16
(ch & 8) = 0
(ch & 2) = 2
似乎是对的。什么是二进制18?二进制文件中的16 | 2
或10010
。
要清楚,&
是一个按位运算符。但是,如果两个操作数都为真,则&&
返回true。
答案 4 :(得分:0)
单个&符号是一个按位AND运算符。
如果值为十六进制,您可能会发现“获取”更容易。
答案 5 :(得分:0)
按位和运算符&
在两个整数的每个位上执行“和”以确定结果。
所以:
18 = 0001 0010
16 = 0001 0000
18& 16 = 0001 0000
答案 6 :(得分:0)
&安培;是按位运算符AND。您可以在http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html
中查看详细信息