1

初心者のJavaプログラミングクラスでこの質問がありますが、私の本では「|」が1つだけ見つかりません。オペレーターとしてを意味します。

質問は:

int j = 0;    
if ((8 > 4) | (j++ == 7))
    System.out.println("j = " + j);

j = 1ですか?

理由を説明。

この本では、OR演算子「||」について説明しています。例を示しますが、この単一の「|」は表示されません。演算子の意味は2つの間で変わりますか?

4

5 に答える 5

5

はい、意味が変わります。||は論理or演算子|ですが、はビット単位orです。

この演算子はビットレベルで動作するため(...)、と同じように短絡することはありません||。つまり、第1オペランドが、であってもtrue、第2オペランドが評価されます。

于 2013-02-05T16:47:53.367 に答える
3

これらの演算子のandフォームではなく、 ||andフォームを使用する場合、Javaは右側のオペランドだけを評価する必要はありません。&&|&

Boolean b = true;
if(b || foo.test())
{
   //we entered without calling test()
}

if(b | foo.test())
{
   //we entered  calling test()
}
于 2013-02-05T16:45:31.173 に答える
1

|->これはビット単位のOR演算子であり、ビット単位の包括的OR演算を実行し、両方のオペランド(右と左)を実行します。

ビットごとのOR「|」オペランドのビットの一方または両方が1の場合、演算子は1を生成します。ただし、両方のビットが0の場合、この演算子は0を生成します。より正確にはOR "|" 演算子は、両方のオペランドの両方のビットが0の場合を除いて、すべての場合に1を返します。

if ((8 > 4) | (j++ == 7)) System.out.println("j = " + j);

ここ8>4に戻りtruej++ == 7戻りfalseます。したがって、if(true|false)ビット単位の演算子はtrueまたは1を返し、j++の後に1になったjの値を出力します。

于 2013-02-05T16:45:03.340 に答える
0

演算子はビット単位の|ORですが、ブール変数でビット単位のORを使用するのはなぜでしょうか。

論理OR演算子(||)には、短絡と呼ばれる機能があります。これは、左側のオペランドがと評価された場合、trueそれ以上の処理は行われず、右側のオペランドも評価されないことを意味します。ただし、ビットごとのOR演算子|は常に両方のオペランドを評価し、ブールオペランドに適用される場合は、両方を評価してから、単純または結果に適用します。

あなたの場合、(j++ == 7)の結果に関係なく、は常に評価されます8 > 4||これは、オペレーターでは発生しません。したがってj、1ずつインクリメントされ、プログラムの出力はです1

于 2013-02-05T16:56:47.080 に答える
-1

jは0で初期化されますが、これ以降は割り当てられないため、答えは「いいえ」です。したがって、jの値は常に0のままです。

于 2013-02-05T16:46:33.550 に答える