最近,我在一本书中看到了一个代码段,它将Boolean
值设置为这样的字段
输入identifier
是List
的{{1}}
String
一元和一的需要是什么?这里的运营商?这不能用简单的方法完成
if (identifier.size() >= 2) {
int c = Integer.parseInt(identifier.get(1));
bulk = (c & 4) == 4;
hazardous = (c & 2) == 2;
toxic = (c & 1) == 1;
}
等而不是c==4
?
答案 0 :(得分:9)
不,这是一个按位操作。
想象一下c=7
。在这种情况下,所有条件都是正确的。
c = 7;
bulk = (c & 4) == 4; // true
hazardous = (c & 2) == 2; //true
toxic = (c & 1) == 1; //true
在二进制文件中,你有这个:
c = 0111; //4-bit to simplify output
bulk = (c & 0100) == 0100; //
hazardous = (c & 0010) == 0010; //true
toxic = (c & 0001) == 0001; //true
由于按位AND(&),您得到0111 & 0010 = 0010
等。
答案 1 :(得分:2)
这是为bit masking
添加的如果 c = 3然后它也被认为是有毒的
toxic = (c & 1) == 1;
如果你写
toxic = c == 1;
那么它将是stcict 1 check
答案 2 :(得分:1)
变量c
显然是bitmask。执行按位&
的效果是屏蔽其他位,只留下一位仍设置。例如,这句话:
bulk = (c & 4) == 4;
测试c
的第2位是否置位(并且不关心其他位) - 第2位是该字节中的1
位:00000100
答案 3 :(得分:1)
c == 4检查c是否等于4,意味着c的二进制形式是000 ... 00100。 (c& 4)== 4如果c的二进制形式是以下xxx ... xx1xx。