4

& と | に出くわすことはめったにありません。|| の代わりに他のコードの論理演算子 と &&。私はそれらを使用したことがなく、それが何のためにあるのかわからなかったので、簡単な調査を行いました.
A && B は、A が false の場合、B は評価されず、false を返すことを意味します。
A & B は、A が false の場合、フォームが false を返す場合でも B が評価されることを意味します。
もちろん|と同じゲームです。と ||。

私の質問は次のとおりです。最初のメンバーが評価を決定する場合、2番目のメンバーを評価することは意味がありますか? 2番目のメンバーがclodeで非常に重要なロジックを実行するコードを想像できるので、評価する必要がありますが、それは悪い習慣だと思います。作るのに十分ですか | そして & 存在しますか?

コメントから、より明確にするために:私は、プログラムが最適ではなく、うまく機能していると感じています。つまり、すべての論理メンバーを評価する必要がある場合、うまく設計されています。

4

6 に答える 6

6

ビット単位の操作を忘れていました

ビットごとの & 演算子は、ビットごとの AND 演算を実行します。

ビットごとの | 演算子は、ビット単位の包含 OR 演算を実行します。

しかし、ここでは、無条件の AND 演算子の方が優れている例を見つけることができます。

無条件の AND (&& ではなく &) を使用した方が良い場合はどのような場合ですか?

于 2013-02-26T13:06:44.690 に答える
5

単一の & および | 論理演算子ではなく、ビットごとの論理演算子です。

于 2013-02-26T13:06:47.903 に答える
2

それはかなり良い例だと思います:

if (initializeConnectionA() & initializeConnectionB() & initializeConnectionC()) {
    performOperation();
} else {
    logger.warn("Not all modules are working properly");
}

メソッド initializeConnection は、すべてが機能していない可能性のある外部サーバーに接続します。それらをすべて初期化する必要はないかもしれませんが、それらのいくつかが機能していない場合は警告を受ける必要があります。

もちろん、これはこの問題の最も明確な解決策ではないかもしれませんが、これは & 演算子が役立つ可能性がある例です。

于 2013-02-26T13:38:26.687 に答える
2

ビット単位およびビット シフト演算子から

ビットごとの & 演算子は、ビットごとの AND 演算を実行します。
ビットごとの ^ 演算子は、ビットごとの排他的 OR 演算を実行します。
ビットごとの | 演算子は、ビット単位の包含 OR 演算を実行します。

JLS 15.22から。ビット演算子と論理演算子

ビット演算子と論理演算子には、AND 演算子 &、排他的 OR 演算子 ^、および包含的 OR 演算子 | が含まれます。引用符

ここに画像の説明を入力

于 2013-02-26T13:10:20.240 に答える
2

| を使用できます。あなたが上で言ったように & 演算子。一部の静的コード アナライザーは、潜在的な問題を覆い隠す可能性があるため、警告を出します。両方の条件を本当に評価したい場合は、次のようにすることができます。

boolean cond1=cond1();
boolean cond2=cond2();
boolean myCond=cond1 && cond2;

使うだけなら

boolean myCond=cond1()&cond2();

誰かがあなたのためにそれを「修正」する義務があります。そうです、& と | を使用する場所がありますが、ほとんどの場合、それは良い考えではなく、わかりやすくするために回避できます。

于 2013-02-26T13:10:24.333 に答える
2

B が常に実行したい関数であるとしたら、それは役に立つでしょう。

于 2013-02-26T13:12:00.377 に答える