# 关于按位与在这个程序的的实际意义

``````public class VoteMsgBinCoder implements VoteMsgCoder{
public static final int MIN_WIRE_LENGTH = 4;
public static final int MAX_WIRE_LENGTH = 16;
public static final int MAGIC = 0x5400;
public static final int MAGIC_MASK = 0xfc00;
public static final int MAGIC_SHIFT = 8;
public static final int RESPONSE_FLAG = 0x0200;
public static final int INQUIRE_FLAG = 0x0100;
public VoteMsg fromWire(byte[] input) throws IOException {
ByteArrayInputStream bs = new ByteArrayInputStream(input);
DataInputStream in = new DataInputStream(bs);

``````if ((magic & MAGIC_MASK) != MAGIC) {
throw new IOException("Bad Magic #: " +
}
boolean resp = ((magic & RESPONSE_FLAG) != 0);
boolean inq = ((magic & INQUIRE_FLAG) != 0);
if (candidateID < 0 || candidateID > 1000) {
throw new IOException("Bad candidate ID: " + candidateID);
}
long count = 0;
if (resp) {
if (count < 0) {
throw new IOException("Bad vote count: " + count);
}
}
// Ignore any extra bytes
return new VoteMsg(resp, inq, candidateID, count);
}
}``````

1 条回答

• 我说我不帅他们就打我，还说我虚伪

`(magic & MAGIC_MASK) != MAGIC)`
`magic`是一组二进制位开关
`MAGIC_MASK`作为参照
这里的意思就是，判断`MAGIC_MASK`标记为1的字段，在`magic`中是否全为1
举例:

``````m M m&M m&M==M
00 01 00 0
01 01 01 1
10 01 00 0
11 01 01 1``````
2019-07-17 19:07:49
赞同 展开评论 打赏

833
1
0
321
1
0
408
1
0
428
1
0
2215
1
0
4106
4
0
5298
1
0
12125
1
0
3360
1
0
3637
3
0