我可以执行哪些位掩码操作?

我正在使用Java SWT,它具有很多可以使用的位标志和操作,但是我对它们不熟悉。

为了更好地解释,我有一种风格

style = SWT.A | SWT.B

基本上翻译为具有样式A B。我知道这是因为

A = 0001
B = 0100
A | B = 0101 (bitwise or)

但是我还没有足够的知识去了解我能做的所有事情,这就是我所知道的

style |= A; // style adds flag A
style &= ~B; // style removes flag B

我可以使用+0左右的东西吗?用于三元运算。

style ?= question ? "+ style A" : "as is,no change"

我在想

style = question ? style | A : style;
style = question ? style & ~B : style;

但是我不确定。

还有什么有用的吗?

libravilla 回答:我可以执行哪些位掩码操作?

还有一个异或。

异或(简称XOR)表示一个或另一个,但不能同时。因此,如果您对01进行异或运算,它将返回一个1。否则为0。而且请不要忘记,这些按位运算符还可以对boolean值进行运算。

int A = 0b0001;
int B = 0b0100;
// A | B = 0101 (bitwise or)


style ^= A; // If off,turn on.  If on,turn off.

style = A|B; // 0101
style ^= A; // style now equals 0100
style ^= A; // style now equals 0101

您也可以交换它。​​

int a = 23;
int b = 47;
a ^= b;
b ^= a;
a ^= b;

Now a == 47 and b == 23

最后,按位运算符还有另一种用途。击败if语句的短路。这是一个示例:

int a = 5;
int b = 8;

// here a is true,no need to evaluate second part,it is short circuited.
if (a == 5 || ++b == 7) {
   System.out.println(a + " " + b);
}
// but here the second part is evaluated and b is incremented.
if (a == 5 | ++b == 7) {
  System.out.println(a + " " + b);
}

我不记得每种使用这种方式的情况,它可能会导致程序中难以发现错误。但这是一个功能。

本文链接:https://www.f2er.com/3034302.html

大家都在问