0

私は次のコードを書きましたが、findbugsがこのエラーを引き起こしています:BIT_ADD_OF_SIGNED_BYTE。たくさん試しましたが、左シフトの概念が正しく理解されていない可能性があります。

void problem() {
    byte [] byteArray = {1, 2, 3, 4, 5};
    int localOne = 0;
    for(int i = 0; i < 4; i++) {
        localOne = (localOne<<8) + byteArray[i]; 
    }
}
4

1 に答える 1

2

あなたはシフトを正しく行っています、あなたの(可能性のある)エラーは署名byteされたものをに追加するときですint

符号拡張のため、これを行う必要があります。

localOne = (localOne<<8) + (0xFF & byteArray[i]); 

(バイナリ)であるバイト80(16進数)があるとします。これは、2の補数表現のため、(10進数)です。さて、それをそれに追加するとき、それは最初にに変換されます。結果はそうではありません1000 0000-128intintint

0000 0000  0000 0000  0000 0000  1000 0000

(バイナリ)

1111 1111  1111 1111  1111 1111  1000 0000

(バイナリ)符号拡張のため。最初のものを取得するには、ビット単位で適用する必要があります。0xFFこれはバイナリです。

0000 0000  0000 0000  0000 0000  1111 1111
于 2012-12-20T10:07:48.637 に答える