2.1、所有算术指令

166 阅读1分钟

所有的算术指令包括:

  • 加法指令:iadd、ladd、fadd、dadd
  • 减法指令:isub、lsub、fsub、dsub
  • 乘法指令:imul、lmul、 fmul、dmul
  • 除法指令:idiv、ldiv、fdiv、ddiv
  • 求余指令:irem、lrem、frem、drem //remainder:余数
  • 取反指令:ineg、lneg、fneg、dneg //negation:取反
  • 自增指令:iinc
  • 位运算指令,又可分为:
    • 位移指令:ishl、ishr、iushr、lshl、lshr、lushr
    • 按位或指令:ior、lor
    • 按位与指令:iand、land
    • 按位异或指令:ixor、lxor
  • 比较指令:dcmpg、dcmpl、fcmpg、fcmpl、lcmp

举例

public static int bar(int i) {
    return ((i + 1) - 2) * 3 / 4;
}

字节码指令对应的图示:

算术指令2.png

一个曾经的案例1

代码:

public void add(){
    byte i = 15;
    int j = 8;
    int k = i + j;
}

字节码对应的内存解析:

算术指令3.png

算术指令4.png

算术指令5.png

算术指令6.png

算术指令7.png

算术指令8.png

算术指令9.png

算术指令10.png

一个曾经的案例2

代码:

public static void main(String[] args) {
    int x = 500;
    int y = 100;
    int a = x / y;
    int b = 50;
    System.out.println(a + b);
}

字节码对应的内存解析:

一个曾经的案例1.png

一个曾经的案例2.png

一个曾经的案例3.png

一个曾经的案例4.png

一个曾经的案例5.png

一个曾经的案例6.png

一个曾经的案例7.png

一个曾经的案例8.png

一个曾经的案例9.png

一个曾经的案例10.png

一个曾经的案例11.png

一个曾经的案例12.png

一个曾经的案例13.png

一个曾经的案例14.png

一个曾经的案例15.png

一个曾经的案例16.png