if文の条件について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
nogu
記事: 2
登録日時: 7年前
住所: 京都

if文の条件について

#1

投稿記事 by nogu » 7年前

早速本題なのですが、if文の条件式についての質問です
画像処理について学んでおり、ファイルを用いたプログラムについてで
if(a7_bitp[j],a7){a7_bitp[j]=255;}
の条件の部分(a7_bitp[j],a7)の処理の意味が分かりません
左辺値、右辺値の概念を理解しても、ifの条件としてどう動くのかよくわかりません
よろしくお願いします。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: if文の条件について

#2

投稿記事 by みけCAT » 7年前

言語が指定されていないので、C言語と仮定します。
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で殴ればいい!(死亡フラグ)

box
記事: 2002
登録日時: 13年前

Re: if文の条件について

#3

投稿記事 by box » 7年前

みけCAT さんが書きました: 従って、この条件は、a7が0と等しいとみなされる(0やヌルポインタなど)ときは真、そうでない時は偽となります。
逆のような気がするんですけどね。
0に類する場合はfalse
それ以外は全部true
じゃないんでしょうか。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: if文の条件について

#4

投稿記事 by みけCAT » 7年前

box さんが書きました:
みけCAT さんが書きました: 従って、この条件は、a7が0と等しいとみなされる(0やヌルポインタなど)ときは真、そうでない時は偽となります。
逆のような気がするんですけどね。
0に類する場合はfalse
それ以外は全部true
じゃないんでしょうか。
あ、逆でしたね…(´・ω・`)
ありがとうございます。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

“C言語何でも質問掲示板” へ戻る