🔥
JavaのByteの計算で詰まった話
入力された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