sk8*_*k89 1 java bit-manipulation operators bitwise-operators typecast-operator
long value = 0x88888888 ;
int i = (int) (value & 0xff);
Run Code Online (Sandbox Code Playgroud)
如何进行上述表达评估?是吗
int i = (int)value & (int)0xff ;
Run Code Online (Sandbox Code Playgroud)
或者首先评估按位和操作?我很困惑: - |
让我们来看看字节码:
public static void main(java.lang.String[]);
Code:
0: ldc2_w #35 // long -2004318072l
3: lstore_1
4: lload_1
5: ldc2_w #37 // long 255l
8: land
9: l2i
10: istore_3
11: return
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的十六进制0xff首先被转化为长,然后使用bitwise and该值通过与屏蔽它0xff 之后它再转换为int
lload_1 从局部变量1加载一个long值
ldc2_w 将常量池(double或long)中的常量#index推入堆栈
land 按位和两个长l2i 将long转换为int