質問: c言語 b += a ? 1 : 0; の意味 c言語を勉強中 b += a ? 1 : 0; という1文があり??な状態になってしまいました。(+=、?:の意味はわかります。おそらく。) これは aが0以外ならb=b+1;、aが0ならb=b+0; (aは条件であり、bにたされるわけではない。)。if文より文が短く、処理も早い、という利点。 で間違いないですか? 自信を持って次に進みたいので、どなたか教えていただきたいと思います。お願いします。
回答: ★tacosan さん、ご指摘ありがとうございます。 質問者さんへ訂正します。 間違い⇒なお ? の前は条件式ですので変数だけの場合はその内容が『真』=0、『偽』=0以外を判定します。 正しい⇒なお ? の前は条件式ですので変数だけの場合はその内容が『偽』=0、『真』=0以外を判定します。 ※良く見たら真偽が逆転していました。恥ずかしいです。ごめんなさい。 最終問題の解答: (a) (b) (ans) (x) (y) (z) 真 真 ans = 1; 2 2 4 真 偽 ans = 1; 2 2 4 偽 真 ans = 2; 1 3 4 偽 偽 ans = 4; 1 2 5 こんな感じになります。 >if文より文が短く、処理も早い、という利点。 この記述は私がc言語を始めた最初のころに本に書かれていました。 今の時代はコンパイラの最適化が優れていますので処理が処理が早くなるかは分かりません。 >b += a ? 1 : 0; この場合は私も if を使って記述します。 その方が見やすいです。 ※昔は速度を気にして1つの変数を使いまわしたり、『resister』キーワードを付けていました。 ※最近はこんな小細工しなくてもcpu処理が全体的に高速処理してくれますのであまり気にしなくても ※良いです。それよりもループ処理に時間が掛からないようにアルゴリズムを見直すべきです。 ★最後に変わった使い方を紹介します。(普段はこんな使い方はしません) #include #include // メイン関数 int main( void ) { int a; printf( "『ctrl-d』+『enter』キーで終了します。\n" ); while ( scanf("%d",&a) == 1 ){ (a > 0) ? printf("(プラス)です。\n\n") : (a < 0) ? printf("(マイナス)です。\n\n") : 0; } return 0; } キーボードから +1、-1、0 と打ち込んでみて下さい。 以上。