0
シリアルストリームを捕捉して2バイトを取り込み、処理中の符号付きshortにしようとしています。コードはシンプルですが、2バイトを組み合わせると時折グリッチが発生します。これは内部にたくさんのプリントがあるコードです。ビット単位のOR処理エラー
println(hex(inBuffer[i-2]) + " " + hex(inBuffer[i-3]));
x = inBuffer[i-2];
println(hex(x));
x <<= 8;
println(hex(x));
println(hex(inBuffer[i-3]));
x = (short) (x | inBuffer[i-3]);
println(hex(x));
for (int j=15; j>=0; j--){
print(((1<<j) & x)>>j);
}
println("");
println(x);
println("");
時々私は偉大である、これを取得:
41 27
00000041
00004100
27
00004127
0100000100100111
16679
素晴らしいですどの!しかし、時々私はこれを得る:
41 A7
00000041
00004100
A7
FFFFFFA7
1111111110100111
-89
これはあまり良くありません。私はなぜ(0xA7 | 0x004100) = 0xFFFFFFA7
か分からない。 考えていますか?