Java:运算符和类型转换

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)

或者首先评估按位和操作?我很困惑: - |

Rod*_*uin 5

让我们来看看字节码:

 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