1

int から IP 文字列に変換するために、Going from 127.0.0.1 to 2130706433 のアプローチを使用しています。

private static final byte BYTE_MASK = (byte)0xff;

protected byte[] unpack(int bytes) {
    return new byte[] {
        (byte)((bytes >>> 24) & BYTE_MASK),
        (byte)((bytes >>> 16) & BYTE_MASK),
        (byte)((bytes >>>  8) & BYTE_MASK),
        (byte)((bytes       ) & BYTE_MASK)
   };
}

しかしFindBugsEclipseバグが発生します: INT_VACUOUS_BIT_OPERATION.

INT_VACUOUS_BIT_OPERATION: 意味のある作業を行わないビット操作。

それはなぜですか、それを修正する方法は?

4

1 に答える 1

4

キャストして& BYTE_MASKいる場合は必要ないためだと思います。私はそれが 0xff であると仮定しています...その場合、それは基本的に無意味です。キャストするだけで同じ効果が得られます。byteBYTE_MASK

JLS のセクション 5.1.3から:

符号付き整数から整数型 T への縮小変換では、下位 n ビットを除くすべてのビットが単純に破棄されます。ここで、n は型 T を表すために使用されるビット数です。数値の大きさに関する情報が失われる可能性に加えて、 、これにより、結果の値の符号が入力値の符号と異なる場合があります。

于 2013-03-12T11:38:44.837 に答える