我遇到了一个java代码,其中常量已按以下方式定义
static final char FM = (char) (ConstantsSystem.DOUBLE_BYTE_SEP | 0xFE);
|
这段代码有什么用?
我遇到了一个java代码,其中常量已按以下方式定义
static final char FM = (char) (ConstantsSystem.DOUBLE_BYTE_SEP | 0xFE);
|
这段代码有什么用?
是|
按位或运算符。它的工作原理如下:
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 位,但int
Java 中的 an 由 32 位表示。
专门针对您的代码,例如,如果我们假设 的值为ConstantsSystem.DOUBLE_BYTE_SEP
256:
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
文档:按位和位移运算符