Java |位运算符

Java |位运算符,java,bit-manipulation,lwjgl,Java,Bit Manipulation,Lwjgl,我一直在使用LWJGL,我想知道如何将if语句与按位运算符|一起使用 我想复制glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) 现在,我如何在一个if中捕捉GL_颜色_缓冲区_位,在另一个if中捕捉GL_深度_缓冲区_位 对不起,我不太擅长解释。使用以下方法: if ((myFlags & GL_COLOR_BUFFER_BIT) == GL_COLOR_BUFFER_BIT) // flag is set, act accor

我一直在使用LWJGL,我想知道如何将if语句与按位运算符|一起使用

我想复制
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)

现在,我如何在一个if中捕捉GL_颜色_缓冲区_位,在另一个if中捕捉GL_深度_缓冲区_位

对不起,我不太擅长解释。

使用以下方法:

if ((myFlags & GL_COLOR_BUFFER_BIT) == GL_COLOR_BUFFER_BIT)
    // flag is set, act accordingly
请注意:这是必要的


现在,为什么这样做。。。让我们举一个假设的例子:

public static final int TEST = 0x4;
// TEST:    0000 0000 0000 0000 0000 0000 0000 0100

value = 35;
// value:   0000 0000 0000 0000 0000 0000 0010 0011

final boolean b1 = (value & TEST) == TEST; // FALSE

value = 70;
// value:   0000 0000 0000 0000 0000 0000 0100 0110

final boolean b1 = (value & TEST) == TEST; // TRUE


注意,在Java中,这样的实践通常很少使用;您通常更喜欢使用
枚举
;然而,奇怪的是,似乎没有一个OpenGL的“DoIttheJavaWay(tm)”API。。。所有现有的API似乎都没有达到常用的程度,或者,如果它们不是故意使用的,就不要记录它://

这里最好的选择是使用用括号分隔的==关系运算符,而不是完全正确的|(或)逻辑运算符

,但是人们可能更喜欢较短的版本:
如果((标志和掩码)!=0)
,因为掩码通常有一个位设置为
1
@cds,所以这是另一个解决方案。。。但在一份1mn的书面答覆中解释所有比特运算,嗯。。。这并不容易;)我不需要所有的。我只需要你要求的。非常感谢。如果你能投票支持我的帖子,那就太好了。@Zyneak我同意在这里不允许出现大量的反对票。。。为了它的价值向上投票。。。