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になります。