1年ほどJavaでプログラミングをしていますが、それでもわからないことがありました。どうやって:
new Font(FontFamily.TIMES_ROMAN, 12, 1 | 4);
どのように | は整数で動作しますか?
ありがとうございました
PS私はたくさんグーグルしました。
1年ほどJavaでプログラミングをしていますが、それでもわからないことがありました。どうやって:
new Font(FontFamily.TIMES_ROMAN, 12, 1 | 4);
どのように | は整数で動作しますか?
ありがとうございました
PS私はたくさんグーグルしました。
演算子は、そのオペランドの「ビットごとの 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)
これはビットごとのOR
演算子であり、個々のビットのレベルで 1 つ以上のビット パターンまたは 2 進数を操作します。
ビットごとの ^ 演算子は、ビットごとの排他的 OR 演算を実行します。
OR ビット演算は、オペランドのいずれかが 1 の場合に 1 を返し、両方のオペランドがゼロの場合にのみ 0 を返します。
JLS 15.22.1で完全な説明を取得できます。
0|0 = 0
0|1 = 1
1|0 = 1
1|1 = 1
したがって、あなたの場合、オペランドは1
and4
です。それらを 2 進数に変換すると (下 4 桁のみ) 0100
、0001
それぞれ と になります。|
少しずつ今を適用します。
0 1 0 0
0 0 0 1
---------
0 1 0 1 = (5 in base 10)