使用| 在java中

kma*_*anu 1 java bitwise-operators bitwise-or

我遇到了一个java代码,其中常量已按以下方式定义

 static final char   FM = (char) (ConstantsSystem.DOUBLE_BYTE_SEP | 0xFE);
Run Code Online (Sandbox Code Playgroud)

什么是使用|这个代码?

And*_*ira 8

|是位或运算符.它的工作原理如下:

0 | 0 == 0
0 | 1 == 1
1 | 0 == 1
1 | 1 == 1
Run Code Online (Sandbox Code Playgroud)

在内部,整数表示为位序列.所以如果你有,例如:

int x = 1 | 2;
Run Code Online (Sandbox Code Playgroud)

这相当于:

int x = 0001 | 0010;
int x = 0011;
int x = 3;
Run Code Online (Sandbox Code Playgroud)

注意,为了清楚起见,我仅使用4位,但intJava中的位数由32位表示.

如果我们假设,例如,值为ConstantsSystem.DOUBLE_BYTE_SEP256 ,则专门解决您的代码:

static final char FM = (char) (ConstantsSystem.DOUBLE_BYTE_SEP | 0xFE);
static final char FM = (char) (256 | 254);
static final char FM = (char) (0000 0001 0000 0000 | 0000 0000 1111 1110);
static final char FM = (char) (0000 0001 1111 1110);
static final char FM = (char) (510);
static final char FM = '?';
Run Code Online (Sandbox Code Playgroud)

另请注意,我编写二进制数的方式不是您在Java中表示二进制文件的方式.例如:

0000 0000 1111 1110
Run Code Online (Sandbox Code Playgroud)

会是真的:

0b0000000011111110
Run Code Online (Sandbox Code Playgroud)

文档:按位和位移操作符