JVMで動作するプログラミング言語を作るにはどうしたらよいのだろう?(9)
今日はshl,shr,ushrを使います。
いわゆるシフト命令です。
iconst_1 iconst_3 ishl
結果8
1を3回左に移動させるので、1*2*2*2=8で8になります。
bipush 16
iconst_1
ishr
結果8
16を1回右に移動させるので、2で割った8になります。
iconst_m1 iconst_1 ishr
結果-1
マイナス1を右に移動させても、マイナス1です。
これはishrが符号を考慮しているために、最上位ビットがコピーされるためです。
iconst_m1 iconst_1 iushr
結果2147483647(0x7FFF FFFF)
iushrを使うと、マイナス1(0xFFFFFFFF)の最上位ビットがコピーされず0が入れられる
為マイナス1を右に移動させると0x7FFFFFFFの2147483647になります。