• ベストアンサー

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

  • javascript if文

    javascript if文 まずソースコードなのですが var num; var sign; num = 20; (1)sign = num >= 0 ? '正' : '負'; console.log( num + "は" + sign ); (2)if(num >= 0){ console.log( num + "は" + sign ); } (1)と(2)は同じ意味なのですか?(1)のやり方はあまり見かけないのですが用途としてはどのような時に使うのですか? 馬鹿な質問でスミマセン。

  • キューのプログラムのif文でわからないところが

    いま、キューのプログラムを見ていてわからないところがあるのですが、 void IncBuf() { if(++Front >= MAX_BUF_NUM){Front = 0;} } このif文の場合、どのような動きをするのかが正直わかりません。 MAX_BUF_NUMは24なのですが、 この場合、if文に入るとFrontをインクリメントして、そのあとにMAX_BUF_NUMの大小を判定するという感じでしょうか? ・私がやりたいのは、if文に入ったら、Frontをまずインクリメントして、その値がMAX_BUF_NUMと同じになったら、Frontに0を入れたい という感じでつくってみたのですが、これであっているのでしょうか?

  • for文&if文を使った問題について教えてください。

    参考書の練習問題を解いていて、応用力がないのか理解できない ので、分かる方教えていただけませんか? 問題: キーボードから整数を入力させ、その数が素数であるかどうかを 判断するコードを記述してください。 解答: import java.io.*; class SampleP5 { public static void main(String[] args) throws IOException { System.out.println("2以上の整数を入力してください。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int num = Integer.parseInt(str); for(int i=2; i<=num; i++){ if(i = = num){ System.out.println(num + "は素数です。"); } else if(num % i = = 0){ System.out.println(num + "は素数ではありません。"); break; } } } } 例えば"7"を入力すると「7は素数です」と出力されるようなんですが、 『i = 7』だとして、『 if(i = = num)』の条件って当てはまるん ですか?for文でiの初期値が2だから、『2 = = 7』で当てはまらない と思うんですが・・・ 考え方が間違っているんですかね? ※ちなみに(= =)のところ、実際はスペース空いてません。  ここの画面での表示上くっついて1本の線になってしまうので、  スペースを空けて入力したまでです。

    • ベストアンサー
    • Java
  • C言語のif文について(初歩の初歩の初歩)

    if(num % 2) とするときnumが2で割り切れ「ない」とき つまり()内が「偽」であるときputsの文が表示されます。 if(num == 0) とするときnumが0のとき つまり()内が「真」であるときputsの文が表示されます。 ()内が非0になるか0になるかというのはわかるのですが 「真」か「偽」かでみると逆になってしまってわかりにくいので 常に if(num != 0) として0じゃ「ない」とき つまり()内が「偽」であるときputsの文を表示させれば 常に()内が「偽」のとき表示されるのでわかりやすいと思ったのですが この先これでやっていくとうまく行かないことが出てきますでしょうか。 簡単なうちに慣れていますべきでしょうか。 それともこのようにやっても問題ないのでしょうか。 皆様はどのようにしているのか教えてください。 よろしくおねがいします。

  • if文

    いつもと違う分を見つけました。 文法が 「if (変数)」 になっていました。 どういう意味ですか?

  • IF文について

    こんにちは。 フリーのチャットのperlで書かれたCGIを見ていて、以下のようなIF文が ありました。 これってどういう意味なのですか? if(! -f $log) { open(OUT,">$log"); close(OUT); } よろしくお願いします。

    • ベストアンサー
    • CGI
  • if文の論理積について

    if文の論理積についての質問があります. 以下の関数は(int)num番目の素数を戻り値とする関数です. long sosuu(int num) { long a,b; int count = 0; for(a = 2; ; a++){ for(b = 2; b < a; b++){ if(a % b ==0) break; } if( (a == b) && (count++ == num)) break; /*ここが問題*/ } return a; } 今のところ,この関数で問題はおきていませんが, if((a==b)&&(count++ == num)); についての質問です. この場合,C言語の内部処理では,(a!=b)の場合,countはインクリメントされないのでしょうか? 論理積で左辺が0の場合は右辺の処理も行われないのでしょうか? 僕が使っている開発環境(BorlandC++,VC++)では両方とも問題は無かったのですが,C言語業界全体としてはどうなのでしょう? 僕としてはソースが見やすくなって都合が良いのですが,他の開発環境担になったとき,バグを出すことになりそうで少し不安です. 他の開発環境を持っている方,教えてください. この関数を使うメイン関数も置いておくので,良かったら,チェック用として使ってください. /*プログラムエントリポイント*/ int main(int num,char *main_hikisu[]) { long input,i,count,sosu; for(i = 1; i < num ; i++) { /*文字列から数字を取得*/ input = atoi(main_hikisu[i]); /*素因数分解できない形の取得*/ if(input <= 1){ printf("%sは素因数分解できません\n",main_hikisu[i]); continue; } /*素因数分解開始*/ printf("%d = ",input); count = 0; do{ sosu = sosuu(count); if(input % sosu == 0){ input /= sosu; printf("%d",sosu); if(input != 1) printf("*"); }else count++; }while( input != 1); printf("\n"); } if(num == 1){ printf("このプログラムはコマンドライン引数に数字を入れることにより,素因数分解を実行します"); }else{ printf("プログラム終了\a"); } return 0; } 以上です.よろしくお願いします.

  • Cプログラムの条件文  if,else if ,elseについて教えてください。

     こんにちは。課題でどうしても解らないところがあるので教えてください。  次のプログラムは一桁の数(0~9)が偶数(EVEN)か奇数(ODD)かを表示するものです。  #include <stdio.h> main() { int num; printf("please enter a number[0~9]:"); scanf("%d",&num); if (num % 2 ==0) printf("%d is an EVEN. \n", num); else printf("%d is an ODD. \n", num); } というプログラムをコンパイルして実行すると、ちゃんと実行されるのですが、10以上の数や負数を入力しても動作してしまうんです。  そこで0~9の範囲以外の数が入力されていないかを確認して、その場合を偶数、奇数の判断や表示をせず、エラーメッセージだけを表示して終了するプログラムに書き換えなくてはならないのですが、まず  (1)判断する条件式(変数numの内容が0~9の範囲にあるか)で、num >= 0 && num <= 9 をどこに入れればいいか。  (2)please enter a number[0~9]: 8 8 is an EVEN.  (←例えば8を入れると普通こうなるのですが)   please enter a number[0~9]:12   ERROR:12 is in out of range!!  (←0~9以外ののものだったら、この様にエラー表示にしたいのです。  私が考えたプログラムは  #include <stdio.h> main() { int num; printf("please enter a number[0~9]:"); scanf("%d",&num); if (num % 2 ==0) printf("%d is an EVEN. \n", num); if else printf("%d is an ODD. \n", num); else(num >= 0 && num <= 9) printf("ERROR:%d is in out of range!! \n",num); } という風に考えたのですがコンパイルできません。プログラミング初心者なので、書いている内容も解りにくいんですが、どうかよろしくお願いします。

  • 値が数値なのかどうかのIF文は?

    INPUTで入力されてきたTEXT内容が「数値」か「文字を含むものか」の判断を行いたいのですが、どのようにすればいいのでしょうか? 入力されたもので計算を行いますので、エラーの発生は避けたいと思っています。 IF 入力値 >= "0" はOKとした場合、「2a2」などのように入力された場合エラーになるからです。 よろしくお願いいたします。 IF INPUT01 <> #NUM のような感じ??

  • IF文についておしえてください(EXCEL2003)

    お世話になります。Excel2003です、IF文について教えてください 例えば IF(U21=TRUE,1200) ↑のようなIF文があります。これはいったいどういう意味なのでしょうか? 基本的にIF文は =IF(条件式,値1,値2) という形式だとおもってましたので、これだと、値がたりない。(2つしかカンマで区切られてない。。 それか、U21がTRUEのとき、1200と入力?という意味なのでしょうか? それだと、U21がTRUEとはどういう意味なのでしょうか? よろしくおねがいいたします。

専門家に質問してみよう