🔥

JavaのByteの計算で詰まった話

2024/06/04に公開

入力されたbyteが0x00 ~ 0xFDの間にあるか確認したい

指定されたbyteが0x00 ~ 0xFDにいる事を確認したく以下コードを書いたとき

Main.java
byte arg = (byte) 0x01;

if((byte) 0x00 >= arg && arg =< (byte) 0xFD){
  System.out.println("問題なし");
}

何故か条件に入らない、、、

Javaのbyteは符号付き

Javaのbyteは符号付きのためbyteを数値として表すと
-128 ~ 127
になる。
つまり、2進数の1000 0000で符号付きとして判断されるため
0x80 ~ 0xFFまではマイナスの値になる。

なので

(byte) 0x00 > (byte) 0xFF

trueになる。

どうしたか

intとして扱ってあげれば符号付きで変換されないので

Main.java
byte arg = (byte) 0x01;

if(0x00 >= arg && arg =< 0xFD){
  System.out.println("問題なし");
}

としてあげれば、やりたいことができる。


byte触る機会少なかったら気づかなかった...(言い訳)

Discussion