• ベストアンサー

if文

if(num) if(num%2) っていうのは、どういう意味ですか? if(num%2==0) とかだったら分かるんですけど・・・

質問者が選んだベストアンサー

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.7

★余談? >★その違和感でコーディングミスに気づけばいいですね。  ↑  警告をエラー扱いさせるオプションを指定すれば良いだけです。 ・質問にある >if(num%2)  これは  if(num%2==1)  または  if(num%2!=0)  と同じになります。  動作的には奇数ならif内が『真』になります。 ・C/C++ではif文、switch文、for文、while文、do-while文の条件式は  みんな0以外なら『真』、0なら『偽』となります。  あと気をつけないといけないことが1つ。  たとえば  『if( isupper(c) )』を分かりやすくする意味で  『if( isupper(c) == 1 )』とすると予期しない動作になります。  理由は isupper(c) のcが英大文字なら0以外『真』を返すとしか決まっていなく  『1』を返すか、『-1』か、あるいは『128』などでも0以外なので『真』として  正しいのです。どうせ記述するなら  『if( isupper(c) != 0 )』となりますが見苦しいので普通は  『if( isupper(c) )』とします。  なので『if ( num )』も num が0以外だけを判定したいなら『!= 0』を  つけなくても良い気がします。特に num が0か、1しか取らないフラグ的ならね。  私の好みではフラグなら『if ( flag )』ですが、それ以外の数値なら  『if ( num != 0 )』としています。 ・今後の参考にして下さい。

その他の回答 (6)

  • yama5140
  • ベストアンサー率54% (136/250)
回答No.6

No4 です。 ★失礼しました、修正します。 ×1:if( iNum = 0 ) とすると、「代入判定」の冗長命令。 ×2:(↑常に「真」です) ○1:if( iNum = 0 ) としても、コンパイラはスルーし、実行しても iNum が 0 の時であってもこの if文命令は「思った」とおりに機能しない( == を = としたミスに気づきにくい)。 ○2:(↑常に「偽」です) ☆No5 さんご指摘ありがとう、ずっと間違えていました。 >if (0 == iNum) と書いてあると違和感を覚えるはずです. ★その違和感でコーディングミスに気づけばいいですね。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.5

iNum = 0 は常に偽なんだけど>#4, それをさておいても if (0 == iNum) と「定数を先に書く」のは個人的にはお勧めしません. まず, この手法は「比較する一方が定数である場合」にのみ適用可能であり, 「左辺値 (例えば変数) 同士を比較する」場合には全く無力です. しかも, われわれは通常「x = 0 なら~」などと記述し「0 = x なら~」とは記述しませんから, if (0 == iNum) と書いてあると違和感を覚えるはずです. そんなことするくらいなら「エラーとして扱うようコンパイラを設定する」べきだと思います.

  • yama5140
  • ベストアンサー率54% (136/250)
回答No.4

(「どういう意味」かは No.1,2,3 さんの回答で・・) ☆ご質問主旨からちょっとズレて・・。 if( iNum = 0 )   // 「警告」 if( 0 = iNum )   // 「エラー」 ★これを逆手にとって(数との等値演算子の使用の場合) if( 0 != iNum ) か if( 0 == iNum ) と、 等値演算子の【前】に数を書く方をお奨めします。 ★理由 if( 0 == iNum ) とコーディングするところをミスして if( 0 = iNum ) とすると、・・・(↑)。 if( iNum == 0 ) とコーディングするところをミスして if( iNum = 0 ) とすると、「代入判定」の冗長命令。 (↑常に「真」です) コーディングの段階で、 《些末なミスは、コンパイラに任せる》 ような工夫(?)をしておけば、あとあと楽です。 ☆人間は、思わぬ所「だから」ミスをする。 ☆プログラムは「思った」とおりには動かない。 ☆プログラムは「命令」どおりに動く。 ★って、ずいぶん話がそれた、←年寄りのお家芸。

回答No.3

もともと、Cには「論理型」というのがなかったのです。 ですから、条件が入るところというのは、すべからく、0なら不成立、0以外なら成立です。 ですから、 != を略しているというわけではないのですね。 ちなみに、もともとは、== も、「等しければ整数値1を、等しければ整数値0を返す」という演算子ですし、!は、!(0)は、1を、!(0以外)は、0を返す演算子です。 こういう仕掛けを利用して、if(num) のような表記をしているコードはまだそこそこ存在しています。 もともと、「0か0でないか」というのが基本ですから。 むしろ、 == や != は、「0か0でないか」という判断をベースにして、「等しい」や「等しくない」をわかりやすく表現し直したものでもあります。 また、これは、 if(isnum(c)) ... //(c が数値の時の処理) if(! isnum(c)) ... //(c が数値以外の時の処理) のように、isで始まる標準関数を使うときにも有効な考え方ですし、 while(idle()); // 通信などがアイドルの間待ち続ける if(error()) ... // エラーが発生したら など、== や != を伴わない使われ方も多く存在します。

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.2

if(num) これは、if (num != 0)とおなじことです。 if(num%2) これは、if (num%2 != 0) とおなじことです。 一般的に if (○)と書いたとき、 ○が0であれば、そのif文は成立しません。 ○が0でなければ、そのif文は成立します。 但し、そのような書き方よりは、誰にも判りやすいように if (○ !=0)か if (○ == 0)と 書く方を奨めます。

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

・numやnum%2が0でなければtrue つまり、if(num==0) や if(num%2==0) の逆の真偽判定です。

micvicpic
質問者

お礼

!=0 を省いているってことですね。 わかりました、ありがとうございます。

関連するQ&A

専門家に質問してみよう