248 words
1 min

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触る機会少なかったら気づかなかった…(言い訳)

JavaのByteの計算で詰まった話
https://storia-blog.pages.dev/blogs/stuck_on_java_byte_math
作者
Storia
公開日
2024-06-04