首页 > 代码库 > 《深入Java虚拟机学习笔记》- 第12章 整数运算

《深入Java虚拟机学习笔记》- 第12章 整数运算

Java虚拟机提供几种进行整数算术运算的操作码,他们执行基于intlong类型的运算。当byteshortchar类型值参与算术运算时,首先会将它们转换为int类型。这些操作码都不会抛出异常,溢出在这里通常可以被忽略。

整数加法

操作码

操作数

说明

iadd

(无)

从栈中弹出两个int类型数,相加,然后将所得int类型结果压回栈

ladd

(无)

从栈中弹出两个long类型数,相加,然后将所得long类型结果压回栈

将一个常量与局部变量相加

操作码

操作数

说明

iinc

vindex,const

把常量与一个位于vindex位置的int类型局部变量相加

wide

iincindexconst

把常量与一个位于vindex位置的int类型局部变量相加

iinc可以用来给局部变量赋值-128127之间的值。这条操作码与用于控制循环执行的变量的加减相比,效率更高。加上wide可以用来把常量的范围增大到-3276832767

整数减法

操作码

操作数

说明

isub

()

从栈中弹出两个int类型数,相减,然后将所得int类型结果压回栈

lsub

()

从栈中弹出两个long类型数,相减,然后将所得long类型结果压回栈

从栈顶弹出两个数,顶端的充当减数,次顶端的充当被减数。

整数乘法

操作码

操作数

说明

imul

()

从栈中弹出两个int类型数,相乘,然后将所得int类型结果压回栈

lmul

()

从栈中弹出两个long类型数,相乘,然后将所得long类型结果压回栈

整数除法

操作码

操作数

说明

idiv

()

从栈中弹出两个int类型数,相除,然后将所得int类型结果压回栈

ldiv

()

从栈中弹出两个long类型数,相除,然后将所得long类型结果压回栈

从栈顶弹出两个数,次顶端的数除以顶端的数(首先被压入栈的数作为被除数或者分子,其次被压入的数作为除数或者分母)。如果整数被0除,会抛出ArithmeticException异常。

整数取余

操作码

操作数

说明

irem

()

从栈中弹出两个int类型数,相减,然后将所得int类型余数压回栈

lrem

()

从栈中弹出两个long类型数,相减,然后将所得long类型余数压回栈

如果整数被0除,会抛出ArithmeticException异常。

操作码

操作数

说明

ineg

()

从栈中弹出两个int类型数,取反,然后将所得int类型结果压回栈

lneg

()

从栈中弹出两个long类型数,取反,然后将所得long类型结果压回栈