深入理解JAVA虛擬機器學習筆記18——位元組碼指令2(運算指令)
本篇繼續位元組碼指令的學習,開始之前,先鞏固一下基礎知識,Java中基本資料型別的範圍。
1. 整型:
1.1 byte:資料型別是8位、有符號的整數,取值範圍-128~127;
1.2 short: 資料型別是 16 位、有符號的整數,取值範圍-32768~32767;
1.3 int:資料型別是32位、有符號的整數,取值範圍為-2147483648~2147483647;
1.4 long:資料型別是 64 位、有符號的整數,取值範圍為-9223372036854774808~9223372036854774807;
2. 浮點型
2.1 float:資料型別是單精度、32位的浮點數,取值範圍是3.402823e+38 ~ 1.401298e-45(e+38表示是乘以10的38次方,同樣,e-45表示乘以10的負45次方);
2.2 double:double 資料型別是雙精度、64 位的浮點數,取值範圍是1.797693e+308~ 4.9000000e-324;
3. 布林型
boolean:佔一位,只有兩個值,true和false;
4. char型:佔16 位,用於存放字元的資料型別,採用unicode編碼,儲存範圍在\u0000~\uFFFF;
知道了基本的資料型別及範圍後,我們看一下運算指令都有哪些。
加法指令:iadd、ladd、fadd、dadd。
減法指令:isub、lsub、fsub、dsub。
乘法指令:imul、lmul、fmul、dmul。
除法指令:idiv、ldiv、fdiv、ddiv。
求餘指令:irem、lrem、frem、drem。
取反指令:ineg、lneg、fneg、dneg。
位移指令:ishl、ishr、iushr、lshl、lshr、lushr。
按位或指令:ior、lor。
按位與指令:iand、land。
按位異或指令:ixor、lxor。
區域性變數自增指令:iinc。
比較指令:dcmpg、dcmpl、fcmpg、fcmpl、lcmp。
需要說明的是,虛擬機器沒有byte,short,char,boolean型別的算術指令,都轉換成int型別指令代替。
然後還有幾點需要注意的,我們舉例說明一下。
1. 如下圖所示,計算兩個int型數字相加;
執行時結果居然是-4!
這時因為相加得到的結果已經超過int所能表示的範圍,資料運算溢位,JVM對於這種情況,不會丟擲異常,而是會返回一個負數。
2. 在算術運算的時候,有一種情況會丟擲異常,那就是除法或求餘的除數為0的時候,執行下圖所示程式碼。
我們可以看到執行結果,丟擲了ArithmeticException異常。
3. 對於浮點數,當最小值超過範圍的時候,會逐級下溢;當最大值超過範圍的時候,會發生上溢。
4. 浮點數運算時,預設的舍入模式為向最接近數輸入模式。
5. 浮點數轉整數的時候採用的時向零舍入,即直接將小數位舍掉。
6. 如果計算的結果沒有明確定義,那麼用NaN值來表示。
喜歡文章或想一起學習的朋友可以關注我,給我點贊,我將會持續更新,有什麼疑問或文中有不當之處請給我留言,真誠地希望能與大家一起交流探討,學習進步。
相關文章
- [深入理解Java虛擬機器]第六章 位元組碼指令簡介Java虛擬機
- Java位元組碼指令Java
- jvm 虛擬機器位元組碼指令表JVM虛擬機
- 硬核萬字長文,深入理解 Java 位元組碼指令(建議收藏)Java
- 深入理解Java虛擬機器8 虛擬機器位元組碼執行引擎Java虛擬機
- Java位元組碼指令表Java
- 位元組碼指令
- 深入理解虛擬機器之虛擬機器位元組碼執行引擎虛擬機
- JAVA虛擬機器學習筆記Java虛擬機機器學習筆記
- 《深入理解 Java 虛擬機器》筆記整理Java虛擬機筆記
- 《深入理解Java虛擬機器》個人筆記Java虛擬機筆記
- 深入學習Java虛擬機器——虛擬機器位元組碼執行引擎Java虛擬機
- java虛擬機器學習筆記(0)Java虛擬機機器學習筆記
- Java虛擬機器學習筆記整理Java虛擬機機器學習筆記
- 深入淺出JVM(十)之位元組碼指令(下篇)JVM
- 《深入理解Java虛擬機器》讀書筆記Java虛擬機筆記
- 深入理解 python 虛擬機器:位元組碼靈魂——Code obejctPython虛擬機
- 深入理解java虛擬機器——讀書筆記1Java虛擬機筆記
- 深入理解 python 虛擬機器:位元組碼教程(2)——控制流是如何實現的?Python虛擬機
- [深入理解Java虛擬機器]第八章 位元組碼執行引擎-方法呼叫Java虛擬機
- 《深入理解java虛擬機器》讀書筆記1(走近java)Java虛擬機筆記
- 《深入理解java虛擬機器》讀書筆記2(java記憶體區域與OOM)Java虛擬機筆記記憶體OOM
- 《深入理解java虛擬機器》學習筆記2——Java記憶體溢位例項Java虛擬機筆記記憶體溢位
- 《深入理解java虛擬機器》第3版筆記3Java虛擬機筆記
- 深入理解Java虛擬機器筆記1: OOM實戰Java虛擬機筆記OOM
- 深入瞭解jvm-2Edition-虛擬機器位元組碼執行引擎JVM虛擬機
- 深入理解 python 虛擬機器:位元組碼教程(3)——深入剖析迴圈實現原理Python虛擬機
- [深入理解Java虛擬機器]第八章 位元組碼執行引擎-基於棧的位元組碼解釋執行引擎Java虛擬機
- 深入理解 python 虛擬機器:令人拍案叫絕的位元組碼設計Python虛擬機
- JVM學習筆記(四)—— 虛擬機器位元組碼執行引擎JVM筆記虛擬機
- 《深入理解java虛擬機器》學習筆記4——Java虛擬機器垃圾收集器Java虛擬機筆記
- 《深入理解java虛擬機器》學習筆記7——Java虛擬機器類生命週期Java虛擬機筆記
- 深入理解Java虛擬機器筆記之二關於物件Java虛擬機筆記物件
- 《深入理解java虛擬機器》學習筆記1——Java記憶體結構Java虛擬機筆記記憶體
- Class檔案結構&位元組碼指令
- 位元組碼指令分析 ++i 和 i++
- 從1+1=2來理解Java位元組碼Java
- 類檔案結構——深入理解Java虛擬機器 筆記三Java虛擬機筆記