5

1年ほどJavaでプログラミングをしていますが、それでもわからないことがありました。どうやって:

new Font(FontFamily.TIMES_ROMAN, 12, 1 | 4);

どのように | は整数で動作しますか?

ありがとうございました

PS私はたくさんグーグルしました。

4

3 に答える 3

11

演算子は、そのオペランドの「ビットごとの OR」を計算|ます。それを理解するには、オペランドをバイナリに変換する必要があります。ビットがどちらの数値にも設定されていない場合は「0」ビットが生成され、どちらにも設定されている場合は「1」ビットが生成されます。

あなたの数字では、 の結果4|1は 5 です。理由は次のとおりです。

  4 = 100
  1 = 001
4|1 = 101 = 5

ビット単位の OR 演算子は、"ビット単位の AND" 演算子に関連しており&、ビットがいずれかの数値に設定されていない場合は "0" を生成し、両方に設定されている場合は "1" のビットを生成します。

これらの演算子は引数のビット単位の表現で機能するため、10 進数 (基数 10) での作業に慣れていると理解しにくい場合があります。次の関係が成立するため、一方の結果がもう一方の場合に簡単に導き出すことができます。

a + b = (a|b) + (a&b)
于 2013-07-14T15:48:09.173 に答える
7

これはビットごとのOR演算子であり、個々のビットのレベルで 1 つ以上のビット パターンまたは 2 進数を操作します

ビットごとの ^ 演算子は、ビットごとの排他的 OR 演算を実行します。

OR ビット演算は、オペランドのいずれかが 1 の場合に 1 を返し、両方のオペランドがゼロの場合にのみ 0 を返します。

JLS 15.22.1で完全な説明を取得できます。

 0|0 = 0
 0|1 = 1
 1|0 = 1
 1|1 = 1

したがって、あなたの場合、オペランドは1and4です。それらを 2 進数に変換すると (下 4 桁のみ) 01000001それぞれ と になります。|少しずつ今を適用します。

0 1 0 0
0 0 0 1
---------
0 1 0 1 = (5 in base 10)
于 2013-07-14T15:47:28.240 に答える