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)
什么是使用|这个代码?
该|是位或运算符.它的工作原理如下:
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)
文档:按位和位移操作符