トップ->C言語入門

あなたは

人目のC(C++)言語入門受講生です。

C言語入門内検索

目次
C言語入門〜トップ
C++言語入門〜トップ
0. はじめに

1. 基本的な決まり
   1. 書式
   2. 予約語
   3. 構成
   4. データの形と宣言
   5. 定数と変数
   6. 簡単な演算

2. 入出力
   1. printf
   2. scanf
   3. 練習問題1
   4. 1文字入出力
   5. エスケープシーケンス

3. 制御文
   1. 順次構造
   2. 単一分岐
   3. 多重分岐
   4. ケース構造
   5. 反復構造(while)
   6. 反復構造(do)
   7. 反復構造(for)
   8. 補助制御文
   9. 練習問題
   10.練習問題

4. 配列
   1. 配列とは
   2. 配列の宣言と初期化
   3. 配列の使用法
   4. 練習問題
   5. 文字列
   6. 2次配列と多次元配列
   7. 練習問題

5. 演算子
   1. 演算子の種類
   2. インクリメント演算子とデクリメント演算子
   3. 複合代入演算子
   4. ビット演算子
   5. シフト演算子
   6. キャスト演算子
   7. 順次演算子
   8. 条件演算子(三項演算子)
   9. sizeof演算子
   10.演算子の優先順位
   11.式と値
   12.条件式と値
   13.練習問題

6. ポインタ
   1. ポインタとは
   2. 配列とポインタ
   3. 文字列とポインタ
   4. ポインタのメリット

7. 関数
   1. 関数の作り方
   2. プロトタイプ宣言
   3. 配列とポインタ
   4. 値渡しとアドレス渡し
   5. main関数の引数
   6. 練習問題
   7. 標準関数
   8. 再帰関数

8. プリプロセッサ
   1. プリプロセッサとは
   2. #define, #undef
   3. #include
   4. #if
   5. #error、#warning
   6. マクロ
   7. 定義済みマクロ

9. 変数の有効範囲
   1. 変数の種類
   2. グローバル変数の有効範囲
   3. オート変数の有効範囲
   4. スタティック変数の有効範囲

10. 構造体
   1. 構造体とは
   2. 構造体の宣言
   3. 構造体の使用法
   4. 構造体のポインタ
   5. 構造体の構造体
   6. 構造体と関数
   7. 練習問題

11. 共用体
   1. 共用体とは
   2. 共用体の宣言
   3. 共用体の使用法

12. ファイル
   1. ファイル
   2. ファイル構造体
   3. ファイル作成・オープン
   4. ファイル読み込み
   5. ファイル書き込み
   6. ファイルクローズ
   7. ファイルエラー
   8. ランダムアクセス
   9. 標準入出力
   10. 練習問題
   11. ファイルの検索
   12. ファイルの削除
   13. ファイル名変更
   14. ディレクトリ操作

13. 低水準入出力関数
   1. 高水準入出力関数との違い
   2. ファイル作成
   3. ファイルオープン
   4. ファイル読み込み
   5. ファイル書き込み
   6. ファイルクローズ
   7. 標準入出力
   8. ランダムアクセス
   9. ファイルポインタとファイルディスクリプタ
   10. 練習問題

14. データ構造
   1. データ構造とは
   2. データ構造の種類
   3. 線形リスト
     4. 単方向リスト
     5. 双方向リスト
     6. 環状リスト
   7. ベクター
   8. 木
     9. 二分検索木
   10. スタック
   11. キュー

15 標準関数
   1. 文字分類・文字変換
   2. 文字列操作
   3. データ変換
   4. メモリー操作
   5. 数値演算
   6. ファイル操作(高水準入出力関数)
   7. ファイル操作(低水準入出力関数)
   8. プロセス関係

16 関数ポインタ
   1. 関数ポインタとは
   2. 関数ポインタ
   3. 関数ポインタと引数・戻り値
   4. 関数ポインタの配列

17. そしてその後は (PR)
   1. ヒューマンアカデミー C言語講座
   2. el school C言語講座
   3. C++入門


・ このページの先頭に戻る
・ トップページに戻る


・ このページの先頭に戻る
・ トップページに戻る

トップ-> C言語入門:演算子-> 5-10. 演算子の優先順位

←前ページへ :  トップへ :  次ページへ→


5-10.演算子の優先順位

  今までに紹介した演算子には優先順位があります。例えば、足し算よりもかけ算の方が 優先順位が高いので、かけ算を先に行う等です。同じ優先順位のものは場合によっては 左にある演算子から右に、場合によっては逆に右から左に評価される場合もあります。 例えば、引き算は左にある物から評価されるので、普通の算数の場合と同じになります。

優先順位 演算子の種類 演算子
















() [] ->※1 .※1
単項演算子 ! ~ ++ -- (キャスト) *※2 &※2 sizeof
二項演算子 剰余 * / %
加減 + -
シフト << >>
比較 < <= > >=
等値、非等値 == !=
論理積(ビット演算子) &
排他的論理和(ビット演算子) ^
論理和(ビット演算子) |
論理積 &&
論理和 ||
条件演算子 ? :
代入演算子、複合代入演算子 = += -= *= /= %= <<= >>= &= ^= |=
順次演算子 ,
 : 同順位の演算子が並んだ場合、左にある物から評価される
 : 同順位の演算子が並んだ場合、右にある物から評価される

※1 : 後述する構造体共用体で使われる演算子
※2 : 後述するポインタで使われる演算子

  これらの優先順位はすべて覚える必要はありません。どちらかわからなくなった場合は 括弧で囲めばいいのです。逆に括弧をつけないで書こうとすると、バグの原因になったり、 見直すときに見にくくなります。

  また、論理演算子の「&&」「||」では注意が必要になります。「&&」の場合、 1項目が「偽」になると2項目以降は評価されません。逆に「||」では1項目が「真」に なった時点で2項目以降は評価されません。

    int  a, b, c;

    if ( (a==1) || (b==2) || (c==3) )
c==3が評価されるのは「a!=1」でかつ「b!=2」の時だけです。
    int  a, b, c;

    if ( (a==1) && (b==2) && (c==3) )
c==3が評価されるのは「a==1」でかつ「b==2」の時だけです。
  逆にこの性質を用いると下の2例(aの値が10〜20の間だけaの値が表示される)は同じになります。
#include <stdio.h>

void main(){
	int  a;
	scanf("%d", &a);

	(10 <= a) &&
	(a <= 20) &&
	printf("%d\n", a);
}
#include <stdio.h>

void main(){
	int  a;
	scanf("%d", &a);

	if ( 10 <= a && a <= 20)
		printf("%d\n", a);
}
  また、「if文」や「for文」、「while文」などで、「[条件式1]と[条件式2]が[真]なら」 という判断をする場合、[条件式1]と[条件式2]の[偽]になる可能性が高い条件式を 先に記述する方が、処理速度が速くなることを意味しています。
#include <stdio.h>
#include <stdlib.h>

void main(){
	int  a;

	do{
		a = rand();
		printf("%d\n", a);
//	}while( a != 10 && a <= 20000 );
	}while( a <= 20000 && a != 10 );
}
※「rand()」関数はint型の乱数を返す関数です。これを利用するためには「stdlib.h」を インクルードする必要があります。
  上の例は、乱数を取得して、20000以下の数でかつ10でなければ繰り返すという プログラムです。一般的に考えて、「乱数20000以下」という条件と、「乱数が10でない」という 条件を考えた場合、「偽」になる可能性は前者の条件の方が高いです。したがって、 緑文字の「while文」よりも、青文字の「while文」の方が効率的であると言えます。


←前ページへ :  トップへ :  次ページへ→