Java:运算符和类型转换

时间:2014-08-07 18:15:54

标签: java operators bit-manipulation bitwise-operators typecast-operator

long value = 0x88888888 ;
int i = (int) (value & 0xff);

上述表达评估是如何进行的?是吗

int i = (int)value & (int)0xff ;

还是首先评估按位和操作?我感到困惑: - |

3 个答案:

答案 0 :(得分:5)

让我们看看bytecode

 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
}

正如您所看到的,十六进制0xff首先转换为long,然后使用bitwise and,然后使用0xff对其进行屏蔽然后转换为int

  • lload_1从本地变量1

  • 加载一个long值
  • ldc2_w将常量池(double或long)中的常量#index推入堆栈

  • land按位和两个长
  • l2i将long转换为int

答案 1 :(得分:3)

首先,按位操作被评估为longs上的操作(括号保证它)。然后将结果转换为int。

答案 2 :(得分:0)

首先(value & 0xff);将被解决。即value(bitwise and)0xff. 然后使用类型转换int i = (int) (value & 0xff);

将结果转换为int值