- ベストアンサー
論理演算について質問
- 論理演算に関する質問について説明します。
- 2つの論理式について、trueになるプロセスについての認識について説明します。
- さらに、論理式の演算結果を計算する場合についても説明します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> &&や||は、その両側にある2つの関係式を論理演算するってことなんですね^^ この表現は一般論としては少々不正確です。 &&や||は、その両側にある2つの“boolean型の式”に対して論理演算を行います。 ==や>=を使った関係式はもちろんboolean型の式ですが、それ以外にもboolean型の式はいろいろあります。 > 両側の関係式を一気評価はせずに一つ一つ評価していくんですか? 「一気」というのは「同時に」とか「並列に」という意味でしょうか。 Javaでは式の評価順序は仕様で厳密に決まっていて、たとえCPUが複数あっても&&の左にある式と右にある式を同時に評価することはありません。 > いろいろな人から僕の仮説のコンセンサスを得たいので 何が正しいのかを確かめるのが難しい分野 (天文学とか量子力学とか) とは違って、プログラミング言語は人間が規則を決めて作ったものですから、“仮説”を立ててその内容が正しいか否かあれこれ悩んだりコンセンサスを得たりする必要はありません。 言語仕様書を納得行くまで読んで理解してください。
その他の回答 (1)
- hitomura
- ベストアンサー率48% (325/664)
> 質問1:&&や||は、その間にある2つの関係式や2つの関係式の論理演算の結果同士などを論理演算するものだと思います。この認識で正しいですか? 「間」じゃ無くて「両側」であること以外は正しいです。 > 質問2:上記の論理式の後者a==1 && b==0 &&c==0 && b==0について、trueになるプロセスの認識は以下で正しいですか? ちょっと違うかなぁ? a==1 はtrue ↓ a==1 がtrue だから、最初の && はその後ろの b==0 を評価する。結果は true なので、a==1 && b==0 は true ↓ a==1 && b==0 が true だから、左から2番目の && はその後ろの c==0 を評価する。結果は true なので、a==1 && b==0 && c==0 は true ↓ a==1 && b==0 && c==0 が true だから、左から3番目の && はその後ろの b==0 を を評価する。結果は true なので、a==1 && b==0 && c==0 && b==0 は true という認識のほうがあっているはずです。 > 質問3:前者の論理式、a==1 && b==0 || (a==1 && b==0)について、trueになるプロセスの認識は以下で正しいですか? 間違っています。処理の流れとしては、 最初のa==1 はtrue ↓ a==1 がtrue だから、最初の && はその後ろの b==0 を評価する。結果は true なので、a==1 && b==0 は true ↓ a==1 && b==0 がtrue だから、|| はその評価結果が true であるとし、その後の式の評価処理を「行わない」。 となります。 つまり、括弧の中の処理は行われません。
補足
以下の内容でお礼します。よろしいですか? 丁重なご回答ありがとうございます^^ &&や||は、その両側にある2つの関係式を論理演算するってことなんですね^^ また追加で質問なのですが、両側の関係式を一気評価はせずに一つ一つ評価していくんですか?
お礼
ありがとうございます! 納得するまで言語仕様書読みます!