Java虛擬機提供幾種進(jìn)行整數(shù)算術(shù)運算的操作碼,他們執(zhí)行基于int和long類型的運算,。當(dāng)byte,、short和char類型值參與算術(shù)運算時,首先會將它們轉(zhuǎn)換為int類型,。這些操作碼都不會拋出異常,,溢出在這里通常可以被忽略,。
整數(shù)加法
操作碼
|
操作數(shù)
|
說明
|
iadd
|
(無)
|
從棧中彈出兩個int類型數(shù),,相加,然后將所得int類型結(jié)果壓回棧
|
ladd
|
(無)
|
從棧中彈出兩個long類型數(shù),,相加,,然后將所得long類型結(jié)果壓回棧
|
將一個常量與局部變量相加
操作碼
|
操作數(shù)
|
說明
|
iinc
|
vindex,const
|
把常量與一個位于vindex位置的int類型局部變量相加
|
wide
|
iinc,index,,const
|
把常量與一個位于vindex位置的int類型局部變量相加
|
iinc可以用來給局部變量賦值-128~127之間的值,。這條操作碼與用于控制循環(huán)執(zhí)行的變量的加減相比,效率更高,。加上wide可以用來把常量的范圍增大到-32768~32767,。
整數(shù)減法
操作碼
|
操作數(shù)
|
說明
|
isub
|
(無)
|
從棧中彈出兩個int類型數(shù),相減,,然后將所得int類型結(jié)果壓回棧
|
lsub
|
(無)
|
從棧中彈出兩個long類型數(shù),,相減,然后將所得long類型結(jié)果壓回棧
|
從棧頂彈出兩個數(shù),,頂端的充當(dāng)減數(shù),,次頂端的充當(dāng)被減數(shù)。
整數(shù)乘法
操作碼
|
操作數(shù)
|
說明
|
imul
|
(無)
|
從棧中彈出兩個int類型數(shù),,相乘,,然后將所得int類型結(jié)果壓回棧
|
lmul
|
(無)
|
從棧中彈出兩個long類型數(shù),相乘,,然后將所得long類型結(jié)果壓回棧
|
整數(shù)除法
操作碼
|
操作數(shù)
|
說明
|
idiv
|
(無)
|
從棧中彈出兩個int類型數(shù),,相除,然后將所得int類型結(jié)果壓回棧
|
ldiv
|
(無)
|
從棧中彈出兩個long類型數(shù),,相除,,然后將所得long類型結(jié)果壓回棧
|
從棧頂彈出兩個數(shù),次頂端的數(shù)除以頂端的數(shù)(首先被壓入棧的數(shù)作為被除數(shù)或者分子,,其次被壓入的數(shù)作為除數(shù)或者分母),。如果整數(shù)被0除,會拋出ArithmeticException異常,。
整數(shù)取余
操作碼
|
操作數(shù)
|
說明
|
irem
|
(無)
|
從棧中彈出兩個int類型數(shù),,相減,,然后將所得int類型余數(shù)壓回棧
|
lrem
|
(無)
|
從棧中彈出兩個long類型數(shù),相減,,然后將所得long類型余數(shù)壓回棧
|
如果整數(shù)被0除,,會拋出ArithmeticException異常。
操作碼
|
操作數(shù)
|
說明
|
ineg
|
(無)
|
從棧中彈出兩個int類型數(shù),,取反,,然后將所得int類型結(jié)果壓回棧
|
lneg
|
(無)
|
從棧中彈出兩個long類型數(shù),取反,,然后將所得long類型結(jié)果壓回棧 |
|