4

Java でビットごとの OR を理解するのに問題があります。Jeff Friesen 著の「Apress Beginning Java7」という Java プログラミングの本を読んでいます。

その本の 31 ページで、著者は 2 つの 8 ビット 2 進数を与え、それら 2 つの数値に対してビットごとの OR を実行しました。彼は言った:

0B0001 1010 | 0B1011 0111 は 0000 0000 0000 0000 0000 0000 1011 1111 になります

それから彼はそれを言った、そして私は引用する:

「最後の 3 行の &、^、および | 演算子は、演算を実行する前に、最初にバイト整数オペランドを 32 ビット整数値に変換します (符号ビット拡張により、符号ビットの値を余分なビットにコピーします)。」

0B0001 1010ここで、最初の 8 ビット数 ( ) を符号ビット拡張で正しく理解すると (32 ビット数) になります。

0B0000 0000 0000 0000 0000 0000 0001 1010

0B1011 0111また、符号ビット拡張による2 番目の数値 ( ) は次のようになります。

0B1111 1111 1111 1111 1111 1111 1011 0111

これら 2 つの拡張数値をビット単位で OR すると、次のようになります。

0B1111 1111 1111 1111 1111 1111 1011 1111

しかし、著者は次のことを知りました。

0B0000 0000 0000 0000 0000 0000 1011 1111

これでどこが間違っているか誰にもわかりますか?なぜ私の答えが著者の答えと違うのか、どこで間違いを犯したのか、誰か親切に教えてもらえますか?

4

1 に答える 1

0

0B10110111バイナリ リテラルの値は typeintです。から暗黙的に昇格されないbyteため、符号拡張はありません。

もしそうなら(byte)0B10110111、あなたはあなたが期待するものを持っているでしょう。

于 2013-04-06T22:17:25.493 に答える