早速本題なのですが、if文の条件式についての質問です
画像処理について学んでおり、ファイルを用いたプログラムについてで
if(a7_bitp[j],a7){a7_bitp[j]=255;}
の条件の部分(a7_bitp[j],a7)の処理の意味が分かりません
左辺値、右辺値の概念を理解しても、ifの条件としてどう動くのかよくわかりません
よろしくお願いします。
if文の条件について
Re: if文の条件について
言語が指定されていないので、C言語と仮定します。
この場合の,はコンマ演算子です。
(関数の引数の区切りなど、コンマ演算子ではない,もあります)
まずコンマ演算子の左辺のa7_bitp[j]が評価されます。
その後右辺のa7が評価されます。 (コンマ演算子の場合、左辺→右辺という評価順序は保証されます)
コンマ演算子の結果は右辺の評価結果となり、左辺の評価結果は捨てられます。
従って、この条件は、a7が0と等しいとみなされる(0やヌルポインタなど)ときは真、そうでない時は偽となります。
【訂正】従って、この条件は、a7が0と等しいとみなされる(0やヌルポインタなど)ようなものではないときは真、0と等しいとみなされる時は偽となります。
ただ、このように(どうせ捨てられる)コンマ演算子の左辺に副作用を持たない式があるのは不自然(コンパイラやオプションによっては警告の対象)なので、何かバグや作者の勘違いがあるかもしれません。
nogu さんが書きました:if(a7_bitp[j],a7){a7_bitp[j]=255;}
の条件の部分(a7_bitp[j],a7)の処理の意味が分かりません
この場合の,はコンマ演算子です。
(関数の引数の区切りなど、コンマ演算子ではない,もあります)
まずコンマ演算子の左辺のa7_bitp[j]が評価されます。
その後右辺のa7が評価されます。 (コンマ演算子の場合、左辺→右辺という評価順序は保証されます)
コンマ演算子の結果は右辺の評価結果となり、左辺の評価結果は捨てられます。
従って、この条件は、a7が0と等しいとみなされる(0やヌルポインタなど)ときは真、そうでない時は偽となります。
【訂正】従って、この条件は、a7が0と等しいとみなされる(0やヌルポインタなど)ようなものではないときは真、0と等しいとみなされる時は偽となります。
ただ、このように(どうせ捨てられる)コンマ演算子の左辺に副作用を持たない式があるのは不自然(コンパイラやオプションによっては警告の対象)なので、何かバグや作者の勘違いがあるかもしれません。
最後に編集したユーザー みけCAT on 2016年10月24日(月) 18:36 [ 編集 1 回目 ]
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: if文の条件について
逆のような気がするんですけどね。みけCAT さんが書きました: 従って、この条件は、a7が0と等しいとみなされる(0やヌルポインタなど)ときは真、そうでない時は偽となります。
0に類する場合はfalse
それ以外は全部true
じゃないんでしょうか。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: if文の条件について
あ、逆でしたね…(´・ω・`)box さんが書きました:逆のような気がするんですけどね。みけCAT さんが書きました: 従って、この条件は、a7が0と等しいとみなされる(0やヌルポインタなど)ときは真、そうでない時は偽となります。
0に類する場合はfalse
それ以外は全部true
じゃないんでしょうか。
ありがとうございます。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)