先po出一段代码
if (((int)scanData[startByte+2] & 0xff) == 0x02 &&((int)scanData[startByte+3] & 0xff) == 0x15) {
patternFound = true;
break;
}
看到if判断中的“&”,我首先是好奇它在此处是逻辑运算符还是位运算符。(这是不是一个比较傻的想法?)
后来发现,“&”在此处做逻辑运算符没什么意义,但是它作为位运算符,在这为什么要这样用?
首先来看“&”作为位运算符的用法:
&(按位与)主要是两个二进制操作数进行按位与操作时,两位都是1结果才是1,即如果是1&1得到的结果才是1,其他情况都是0。
于是我又有一个奇怪(蠢)的想法:&是只能被二进制数操作吗?那在此处左右两边都不是二进制,是怎么回事?在被人鄙视过之后,才明白&只是操作数的二进制形式,操作数可以是二、八、十、十六进制。
于是第三个问题:0xff的十进制是255,八位二进制就是11111111,一个数&上它,应该是不变的。
网上查原因,发现了一个例子:
public class Test {
public static void main(String[] args) {
byte[] a = new byte[10]