不能==被用来代替一元&检查两个值是否相等

时间:2011-09-16 10:57:20

标签: java boolean bit-manipulation operator-keyword

最近,我在一本书中看到了一个代码段,它将Boolean值设置为这样的字段

输入identifierList的{​​{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

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。