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

发布于 2024-12-05 07:55:15 字数 428 浏览 0 评论 0原文

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

输入 identifierList >Strings

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 等而不是 (c & 4)== 4

Recently I came across a code snippet in a book which sets a Boolean value to a field like this

the input identifier is a List of Strings

if (identifier.size() >= 2) {
    int c = Integer.parseInt(identifier.get(1));
    bulk = (c & 4) == 4;
    hazardous = (c & 2) == 2;
    toxic = (c & 1) == 1;
}

what is the need for unary & operators here?Can't this be done using a simple
c==4 etc instead of (c & 4)== 4 ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

初心 2024-12-12 07:55:16

不,这是按位运算。

想象一下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

由于按位与(&),你会得到 0111 & 0010 = 0010

No, this is a bitwise operation.

Imagine c=7. In that case all conditions would be true.

c = 7;
bulk = (c & 4) == 4; // true
hazardous = (c & 2) == 2; //true
toxic = (c & 1) == 1; //true

In binary, you'd have this:

c = 0111; //4-bit to simplify output
bulk = (c & 0100) == 0100; //
hazardous = (c & 0010) == 0010; //true
toxic = (c & 0001) == 0001; //true

Due to bitwise AND (&) you get 0111 & 0010 = 0010 etc.

屌丝范 2024-12-12 07:55:16

这是为位掩码添加的

,如果
c = 3 那么它也会被认为是有毒的,

 toxic = (c & 1) == 1;

如果你这样写

 toxic = c  == 1;

,那么它将是 stcict 1 检查

This is added for bit masking

if
c =3 then also it will be considered as toxic with this

 toxic = (c & 1) == 1;

if you write

 toxic = c  == 1;

then it would be stcict 1 check

马蹄踏│碎落叶 2024-12-12 07:55:16

变量c显然是一个位掩码。执行按位 & 的效果是屏蔽其他位,只留下一位仍然设置。例如,以下语句:

    bulk = (c & 4) == 4;

测试 c 的位 2 是否已设置(并且不关心其他位) - 位 2 是该字节中的 1 位: 00000100

The variable c is clearly a bitmask. The effect of doing the bitwise & is mask off the other bits, leaving just the one bit still set. For example, this statement:

    bulk = (c & 4) == 4;

tests if bit 2 of c is set (and doesn't care about the other bits) - bit 2 being the 1 bit in this byte: 00000100

心凉 2024-12-12 07:55:16

c == 4 检查 c 是否等于 4,这意味着 c 的二进制形式为 000...00100。 (c & 4) == 4 如果 c 的二进制形式如下 xxx...xx1xx。

c == 4 checks if c equals 4, meaning the binary form of c is 000...00100. (c & 4) == 4 if the binary form of c is the following xxx...xx1xx.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文