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