javaのlong定数ではまる
longの下位32bitだけ取り出そうと思って、32bitのマスクを定数で指定したらはまった。
32bitだからintでいいだろう→longと演算する時点で拡張されるから駄目。
さらに、Lつけないとlongにならないのをすっかり忘れてた。
こんなかんじ
出力
long v = -1;
System.out.println(Long.toHexString(v&0xffffffff));
System.out.println(Long.toHexString(v&(long)0xffffffff));
System.out.println(Long.toHexString(v&0xffffffffL));
ffffffffffffffff
ffffffffffffffff
ffffffff