初めまして。初心者のコッペリアと申します。
以下のプログラムの出力内容の理由がわかりません…
どなたかわかりやすく解説お願いしますm(_ _)m
論理演算子について
Re: 論理演算子について
JISによると
6.5.13 論理 AND 演算子
(抜粋)
ビット単位の 2 項&演算子と異なり,&&演算子は左から右への評価を保証する。第 1 オペランドの評価
の直後を副作用完了点とする。第 1 オペランドの値が 0 と比較して等しい場合,第 2 オペランドは評価し
ない。
6.5.14 論理 OR 演算子
ビット単位の|演算子と異なり,||演算子は左から右への評価を保証する。第 1 オペランドの評価の直
後を副作用完了点とする。第 1 オペランドの値が 0 と比較して等しくない場合,第 2 オペランドは評価し
ない。
と書かれてます。
つまり
++x || ++y && ++z の場合
評価は左から行われるので、++x が評価され2になるので0以外であり、次の演算子が||なのでそれ以降の評価がされません。
++x && ++y || ++z の場合
、++x が評価され2になるので0以外であり、次の演算子が&&なので、その次の++yが評価されて2になり、次の演算子が||なのでそれ以降は評価されません。
6.5.13 論理 AND 演算子
(抜粋)
ビット単位の 2 項&演算子と異なり,&&演算子は左から右への評価を保証する。第 1 オペランドの評価
の直後を副作用完了点とする。第 1 オペランドの値が 0 と比較して等しい場合,第 2 オペランドは評価し
ない。
6.5.14 論理 OR 演算子
ビット単位の|演算子と異なり,||演算子は左から右への評価を保証する。第 1 オペランドの評価の直
後を副作用完了点とする。第 1 オペランドの値が 0 と比較して等しくない場合,第 2 オペランドは評価し
ない。
と書かれてます。
つまり
++x || ++y && ++z の場合
評価は左から行われるので、++x が評価され2になるので0以外であり、次の演算子が||なのでそれ以降の評価がされません。
++x && ++y || ++z の場合
、++x が評価され2になるので0以外であり、次の演算子が&&なので、その次の++yが評価されて2になり、次の演算子が||なのでそれ以降は評価されません。
non
Re: 論理演算子について
出力内容はコンパイルエラー、理由はあってはいけない場所に全角スペースがあるからですね。コッペリア さんが書きました:以下のプログラムの出力内容の理由がわかりません…
また、printf関数の宣言もその宣言を含むヘッダのincludeも無いのもまずいでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 論理演算子について
nonさん、ありがとうございました!
わかりやすい解説で理解することができました!
みけCATさん、ありがとうございました。
そうですよね。
課題なんですが、こんな感じで出されるんです…
おかしいですよね…
わかりやすい解説で理解することができました!
みけCATさん、ありがとうございました。
そうですよね。
課題なんですが、こんな感じで出されるんです…
おかしいですよね…