你能解释一下在两个十六进制线之间使用按位运算符会发生什么吗?

0 java bit-manipulation

我从Java教程得到了这个,我迷路了,我只是不明白当你使用&运算符时会发生什么

class BitDemo {
public static void main(String[] args) {
    int bitmask = 0x000F;
    int val = 0x2222;
    // prints "2"
    System.out.println(val & bitmask);
}
}
Run Code Online (Sandbox Code Playgroud)

我如何使两个整数(位掩码和val)显示14?我没有关于你如何操纵它们来制作数字的概念.

Ale*_* C. 7

&是按位AND运算符.

让我们把这个运算符的真值表放在两个变量中:

p   q   p & q
0   0     0
0   1     0
1   0     0
1   1     1
Run Code Online (Sandbox Code Playgroud)

您在二进制中的值等于(您可以使用Integer.toBinaryString(int i)):

00000000001111
10001000100010
Run Code Online (Sandbox Code Playgroud)

应用&收益率:

   00000000001111
&  10001000100010
__________________
   00000000000010
Run Code Online (Sandbox Code Playgroud)

等于2.


我如何使两个整数(位掩码和val)显示14?

只需将掩码设置为0xFFFF(仅"1"),将val设置为14(0x000E十六进制).

int bitmask = 0xFFFF;
int val = 0x000E;
Run Code Online (Sandbox Code Playgroud)

这是一种可能的解决方案.


4J4*_*J41 5

&是按位AND运算符.

a      0x000F = 0000 0000 0000 1111
b      0x2222 = 0010 0010 0010 0010

-----------------------------------
a & b         = 0000 0000 0000 0010 = 2
Run Code Online (Sandbox Code Playgroud)

要获得14,请尝试0x000F & 0x000E.