質問: (byte)0xff; if(aaa > bbb){ 処理 } のようにするとbyteの最上位bitは符号として扱われるため 0xff=-127となってしまい意図した結果が得られません。 unsigned byteなるものがあれば都合がよいのですが、javaではサポートしておらず困っております。 代替案として、 if(aaa&0xff > bbb&0xff) などとして、一度intへ変換後比較すれば可能ですが、int用のメモリ領域を作成しなくてはならず、非効率の気がします。 byte変数の比較で、他に効率のよい方法はりませんでしょうか?
回答: > byte->int処理部が効いてしまっているのですかね。 そのようですね。 c の場合は load reg,aaa; comp reg,bbb の2命令で java の場合 load reg0,aaa; (if not sign extended load & aaa>0x7f, sign extend) andi reg0,0xff load reg1,bbb ... comp reg0,reg1 のようになると思います。 (...) の部分は後に続くのがバイトマスク命令であれば省けるはずですが、無条件にsign extended 32bit int に変換するだけだったらそのまなので時間がかなり余分にかかるでしょうね。 "java 逆アセンブラ"、"java 逆コンパイラ", "java virtual machine specification", "java jit compiler" 等で必要であれば調べて下さい。