if((a >= 1 && a++) || b>=3 ){
処理X;
}
という場合、どのような動きをするのでしょうか?
どなたか分かる方いたら教えてください。
if文について
Re: if文について
1.条件分岐をします。
2.aが1以上なら真になります。
3.前の文(a>=1)が真なら次の文(a++)を評価します。
前の文が真なら次の文を評価せず偽になります。
4.aの値を1増やし、増やす前のaの値を返します。
5.前の文(a >= 1 && a++)が偽なら次の文(b>=3)を評価します。
前の文が真なら次の文を評価せず真を返します。
6.bが3以上なら真を返します。
7.((a >= 1 && a++) || b>=3 )が真なら{}内を実行します。
2.aが1以上なら真になります。
3.前の文(a>=1)が真なら次の文(a++)を評価します。
前の文が真なら次の文を評価せず偽になります。
4.aの値を1増やし、増やす前のaの値を返します。
5.前の文(a >= 1 && a++)が偽なら次の文(b>=3)を評価します。
前の文が真なら次の文を評価せず真を返します。
6.bが3以上なら真を返します。
7.((a >= 1 && a++) || b>=3 )が真なら{}内を実行します。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: if文について
ここを必ず通るって書いてあるように見えるんですが、よろしいんですか?みけCAT さんが書きました: 4.aの値を1増やし、増やす前のaの値を返します。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: if文について
こんな感じじゃないんでしょうか。
1)a >= 1 かどうか評価する。真ならば2)へ。偽ならば、(a >= 1 && a++) 全体が偽であることがわかったので、a++ を評価せずに4)へ。
2)aをインクリメントする。評価結果はインクリメントする前のa(前項で、1以上であることは確定しているので、必ず真)。
3)(a >= 1 && a++) が真であることがわかったので、if文全体が真であることがわかった。よって、b >= 3 を評価せずに5)へ。
4)b >= 3 かどうか評価する。真ならば5)へ。偽ならば処理Xを実行せずにif文から抜ける。
5)処理Xを実行してif文から抜ける。
このif文を終了した時点でaの値がどうなっているかは、上記1)の結果しだい。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。