次のコードがあります。
int SOME_MASK = 0x0000ffff;
int value = /* some value */;
int something = SOME_MASK & value;
// WHY IS "something" guaranteed to be non-negative ?
if (something != NEGATIVE_CONSTANT) {
// do something here....
}
FindBugs分析の警告が表示され続けます。
正しさ - 負でない値と負の定数との不適切な比較 このコードは、負でないことが保証されている値を負の定数と比較します。
ビットごとの AND の結果を負の定数と比較する行に対して警告がポップアップします。
ビットごとの AND の結果が非負であることが保証されている理由がわかりません。これは常にそうですか?