う~む?こんな関数を作ってみるのも一案ですが、どっちが非効率だか判りませんね。
public class testbyte {
/**
* @param args
*/
public static void main(String[] args) {
byte[] aaa = new byte [] {
(byte)0x00, (byte)0x01, (byte)0x02,
(byte)0x03, (byte)0x7f, (byte)0x80,
(byte)0x81, (byte)0xfe, (byte)0xff };
String[] sss = new String [] {
"00", "01", "02",
"03", "7F", "80",
"81", "FE", "FF" };
for(int lp=0;lp<aaa.length;lp++){
for(int i=0;i<aaa.length;i++){
System.out.print(sss[lp]);
int ret= compare(aaa[lp],aaa[i]);
if(ret<0){
System.out.print(" < ");
}else if(ret>0){
System.out.print(" > ");
}else{
System.out.print(" = ");
}
System.out.println(sss[i]);
}
}
}
/**
* 偶数 > 奇数である比較規則を定義する。
*
* @param i1 比較する最初の項
* @param i2 比較する二番目の項
* @return i1 が負数かつ i2 が正であれば 1
* i1 が正数かつ i2 が負数であれば -1
* 両方とも正数の場合は自然順序に従う
* 両方とも負数の場合は自然順序に従う
*/
public static int compare(byte i1, byte i2){
if((i1<0) && (i2>=0)) return 1;
if((i1>=0) && (i2<0)) return -1;
return (i1 - i2);
}
}
00 = 00 00 < 01 00 < 02 00 < 03 00 < 7F 00 < 80 00 < 81 00 < FE 00 < FF
01 > 00 01 = 01 01 < 02 01 < 03 01 < 7F 01 < 80 01 < 81 01 < FE 01 < FF
02 > 00 02 > 01 02 = 02 02 < 03 02 < 7F 02 < 80 02 < 81 02 < FE 02 < FF
03 > 00 03 > 01 03 > 02 03 = 03 03 < 7F 03 < 80 03 < 81 03 < FE 03 < FF
7F > 00 7F > 01 7F > 02 7F > 03 7F = 7F 7F < 80 7F < 81 7F < FE 7F < FF
80 > 00 80 > 01 80 > 02 80 > 03 80 > 7F 80 = 80 80 < 81 80 < FE 80 < FF
81 > 00 81 > 01 81 > 02 81 > 03 81 > 7F 81 > 80 81 = 81 81 < FE 81 < FF
FE > 00 FE > 01 FE > 02 FE > 03 FE > 7F FE > 80 FE > 81 FE = FE FE < FF
FF > 00 FF > 01 FF > 02 FF > 03 FF > 7F FF > 80 FF > 81 FF > FE FF = FF
補足
ご回答ありがとうございます。 そうですか。ではこのままが一番でファイナルアンサーなのですかね。 同処理を何百単位で繰り返し実行させた場合、JITコンパイルされる事を考えると、Cで同じ事をさせた場合と同じような結果を期待したのですが、Javaの方が数倍遅い結果となりました。これは byte->int処理部が効いてしまっているのですかね。