1

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

 static final char   FM = (char) (ConstantsSystem.DOUBLE_BYTE_SEP | 0xFE);

|这段代码有什么用?

4

1 回答 1

8

|按位或运算符。它的工作原理如下:

0 | 0 == 0
0 | 1 == 1
1 | 0 == 1
1 | 1 == 1

在内部,整数表示为位序列。因此,如果您有,例如:

int x = 1 | 2;

这相当于:

int x = 0001 | 0010;
int x = 0011;
int x = 3;

注意为了清楚起见,我只使用了 4 位,但intJava 中的 an 由 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 = 'Ǿ';

另请注意,我编写二进制数的方式与您在 Java 中表示二进制数的方式不同。例如:

0000 0000 1111 1110

真的是:

0b0000000011111110

文档:按位和位移运算符

于 2015-03-17T05:26:21.230 回答