【2026年7月最新】C言語の演算子完全ガイド|算術・比較・論理・ビット・優先順位を徹底解説
この記事の内容
「++xとx++は何が違うの?」「%って何の演算子?」「演算子の優先順位が分からなくてバグが起きた」——C言語を学ぶ際に多くの人がつまずくのが演算子の理解です。
C言語には算術・比較・論理・代入・ビット・sizeof・キャストなど多種多様な演算子があり、それぞれの使い方と優先順位を正しく理解しないと予期しないバグが発生します。特に、インクリメント演算子の前置(++x)と後置(x++)の違いは、多くの初学者が実際にコードを動かして初めて理解できる重要ポイントです。
この記事ではC言語の全演算子を体系的に整理し、それぞれの動作・使い方・よくあるミスをサンプルコード付きで解説します。さらにClaude Codeを使ってC言語のコード作成を支援する方法も紹介します。
01 OPERATORS OVERVIEW C言語の演算子とは――基礎と分類の全体像 プログラムで「計算・比較・判断」を担う記号の仕組みを理解する
演算子(operator)とは、プログラム中で計算・比較・論理判断・ビット操作などを行うための記号です。数学で「+」や「−」を使って計算するように、C言語でも様々な演算子を使ってプログラムの処理を記述します。
📚 用語解説
演算子(Operator):プログラムで特定の計算・処理を行うための記号・キーワードのこと。演算子が処理する対象を「オペランド(operand)」といいます。例えば「a + b」では「+」が演算子で、「a」と「b」がオペランドです。C言語では数値計算から論理判断・ビット操作まで50種類以上の演算子があります。
C言語の演算子は以下のカテゴリに分類されます。
| カテゴリ | 主な演算子 | 役割 |
|---|---|---|
| 算術演算子 | +, -, *, /, %, ++, -- | 四則演算・余り・インクリメント/デクリメント |
| 比較演算子 | ==, !=, <, >, <=, >= | 2つの値を比較して真偽値を返す |
| 論理演算子 | &&, ||, ! | AND・OR・NOT論理演算 |
| 代入演算子 | =, +=, -=, *=, /=など | 変数への代入・複合代入 |
| ビット演算子 | &, |, ^, ~, <<, >> | ビット(2進数)単位の演算 |
| 条件演算子 | ? : | 条件によって値を選択(三項演算子) |
| sizeof演算子 | sizeof | データ型やオブジェクトのバイト数を得る |
| キャスト演算子 | (型名) | データ型を強制変換する |
| ポインタ演算子 | *, &, -> | アドレス・ポインタ操作 |
全演算子を一度に覚えようとするのは非効率です。まず①算術演算子(+,-,*,/,%)②比較演算子(==,!=,<,>など)③論理演算子(&&,||,!)④代入演算子(=,+=など)の4系統を習得しましょう。これだけで基本的なCプログラムの大部分が書けます。ビット演算子やポインタは実際に必要になったタイミングで学ぶので十分です。
02 ARITHMETIC OPERATORS 算術演算子――四則演算と余り・インクリメント 最も使用頻度の高い演算子グループを完全マスターする
算術演算子は数値の計算に使う演算子です。日常の計算と同様の「+」「-」「*」「/」に加えて、C言語特有の「%」(余り)・「++」(インクリメント)・「--」(デクリメント)があります。
| 演算子 | 意味 | 例 | 結果 |
|---|---|---|---|
| + | 加算 | 10 + 3 | 13 |
| - | 減算 | 10 - 3 | 7 |
| * | 乗算 | 10 * 3 | 30 |
| / | 除算 | 10 / 3 | 3(整数除算) |
| % | 余り(剰余) | 10 % 3 | 1 |
| ++ | インクリメント(+1) | ++x または x++ | xが1増える |
| -- | デクリメント(-1) | --x または x-- | xが1減る |
2-1. 整数除算の落とし穴
C言語で整数同士を「/」で割ると、結果も整数になります(小数点以下は切り捨て)。例えば10 / 3の結果は3(3.333...ではなく)です。小数点以下も含めた結果が欲しい場合は、どちらかの値を浮動小数点数(floatまたはdouble)にキャストする必要があります。
「0」で割る(除算・剰余どちらも)とプログラムがクラッシュします(未定義動作)。除算を行う前に必ず分母が0でないことを確認する習慣をつけましょう。「if (b != 0) { result = a / b; }」のように条件チェックを入れるのが安全なコーディングの基本です。
2-2. %(剰余演算子)の使いどころ
余りを求める%演算子は、「偶数・奇数の判定」「一定間隔の処理」「循環インデックス」などでよく使われます。
2-3. インクリメント(++)とデクリメント(--)の前置・後置の違い
インクリメント演算子には前置(++x)と後置(x++)の2種類があります。どちらも「変数の値を1増やす」ことに変わりはありませんが、「式の評価結果」が異なります。
| 記法 | 動作 | xが5のとき「y = ++x」または「y = x++」の結果 |
|---|---|---|
| 前置: ++x | まずxを+1してから、式の値として新しいxを使う | x=6、y=6(先に増やしてからyに代入) |
| 後置: x++ | まず現在のxを式の値として使い、その後xを+1する | x=6、y=5(yには元の値5が代入され、後でxが6になる) |
📚 用語解説
インクリメント(Increment):変数の値を1増やす操作のこと。C言語では++演算子で表します。前置(++x)は「先に+1してから使う」、後置(x++)は「使ってから+1する」という違いがあります。デクリメント(--)は逆に1減らす操作です。forループのカウンタ変数でよく使われます(i++やi--)。
「i++;」や「++i;」のように単独でインクリメントだけを行う場合(式の評価結果を使わない場合)は、前置でも後置でも結果は同じです。混乱を避けるために、「式の一部として使うときだけ前置・後置の違いを意識する」というシンプルなルールで覚えましょう。
03 COMPARISON & LOGIC 比較演算子・論理演算子・短絡評価 条件分岐の核心となる演算子を完全理解する
比較演算子と論理演算子は、C言語のif文・while文・for文などの条件式で使われる演算子です。これらを正しく使えないとプログラムの条件分岐が正しく動きません。
3-1. 比較演算子――6種類の比較方法
| 演算子 | 意味 | a=5, b=3 のとき | 結果 |
|---|---|---|---|
| == | 等しい | a == b | 偽(0) |
| != | 等しくない | a != b | 真(1) |
| < | より小さい | a < b | 偽(0) |
| > | より大きい | a > b | 真(1) |
| <= | 以下 | a <= 5 | 真(1) |
| >= | 以上 | a >= 3 | 真(1) |
代入演算子「=」と等値比較演算子「==」の混同は、C言語初心者が最もよくやるバグの原因です。「if (a = 5)」と書くとaに5が代入されて常に真になってしまいます。比較したいときは必ず「if (a == 5)」と書きましょう。特に定数と変数の比較では「if (5 == a)」のように定数を左に書く「ヨーダ記法」を使うと、万が一「=」にしても構文エラーで気づけます。
3-2. 論理演算子――AND・OR・NOT
| 演算子 | 意味 | 例 | trueになる条件 |
|---|---|---|---|
| && | 論理AND(かつ) | a > 0 && a < 10 | 両方が真のとき |
| || | 論理OR(または) | a < 0 || a > 100 | どちらかが真のとき |
| ! | 論理NOT(否定) | !(a == 5) | aが5でないとき |
3-3. 短絡評価(Short-circuit Evaluation)
C言語の&&と||には短絡評価(ショートサーキット評価)という重要な仕組みがあります。&&では左の式が偽なら右の式は評価されません。||では左の式が真なら右の式は評価されません。
📚 用語解説
短絡評価(Short-circuit Evaluation):論理演算子(&&や||)で左側の式だけで結果が確定する場合、右側の式を評価しない仕組み。「&&」は左が偽なら全体が偽で確定するため右を見ない。「||」は左が真なら全体が真で確定するため右を見ない。これによりポインタのNULLチェックを安全に書けるなどの実用的なメリットがあります。
04 ASSIGNMENT OPERATORS 代入演算子・複合代入演算子 変数への代入をシンプルに書くための演算子を完全解説
代入演算子の基本は=ですが、C言語には算術演算と代入を組み合わせた複合代入演算子があります。これを使うと「変数の値を更新する」コードが短く書けます。
| 演算子 | 意味 | 例 | 等価な表現 |
|---|---|---|---|
| = | 代入 | a = 5 | aに5を代入 |
| += | 加算代入 | a += 3 | a = a + 3 |
| -= | 減算代入 | a -= 3 | a = a - 3 |
| *= | 乗算代入 | a *= 3 | a = a * 3 |
| /= | 除算代入 | a /= 3 | a = a / 3 |
| %= | 剰余代入 | a %= 3 | a = a % 3 |
| &= | ビットAND代入 | a &= 0xFF | a = a & 0xFF |
| |= | ビットOR代入 | a |= 0x01 | a = a | 0x01 |
| <<= | 左シフト代入 | a <<= 2 | a = a << 2 |
| >>= | 右シフト代入 | a >>= 2 | a = a >> 2 |
「total = total + i」より「total += i」の方が短く読みやすいだけでなく、変数名のタイプミスによるバグも防げます。長い変数名(例:accumulated_sales_amount)の場合、複合代入演算子を使うことで同じ変数名を2回書くミスをなくせます。
05 BITWISE & SIZEOF ビット演算子・sizeof・キャスト演算子 組み込み開発・低レベル処理で欠かせない演算子群を解説
ビット演算子はデータをビット(2進数の1桁)単位で操作する演算子です。組み込み開発・OSプログラミング・フラグ管理など低レベルな処理でよく使われます。
📚 用語解説
ビット(bit):コンピュータが扱うデータの最小単位。0または1の値しか持ちません。8ビット=1バイト。C言語のビット演算子は、整数型変数の各ビットに直接アクセスして操作できます。マイコンやハードウェア制御(レジスタ操作)では必須の知識です。
| 演算子 | 名称 | 例(a=0b1010, b=0b1100) | 結果(2進数) | 10進数 |
|---|---|---|---|---|
| & | ビットAND | a & b | 0b1000 | 8 |
| | | ビットOR | a | b | 0b1110 | 14 |
| ^ | ビットXOR | a ^ b | 0b0110 | 6 |
| ~ | ビット反転 | ~a | 0b...0101(符号付きで変化) | (型依存) |
| << | 左シフト | a << 1 | 0b10100 | 20(×2) |
| >> | 右シフト | a >> 1 | 0b0101 | 5(÷2) |
5-1. ビット演算子の実用的な使い方
5-2. sizeof演算子とキャスト演算子
sizeof演算子はデータ型やオブジェクトのバイト数を返します。プラットフォーム(32ビット/64ビット)によってintのバイト数が変わることがあるため、移植性の高いコードを書くにはsizeofを活用するのが重要です。
📚 用語解説
キャスト(Type Cast):変数やリテラルのデータ型を別の型に明示的に変換すること。「(型名)式」の形式で書きます。整数÷整数が整数除算になる問題を回避するため「(double)a / b」のように一方を浮動小数点型にキャストするのが典型的な使用例です。型変換はデータが変わる可能性があるため、精度の低い型への変換(double→int)は慎重に行うことが必要です。
06 OPERATOR PRECEDENCE 演算子の優先順位――完全一覧と実践的な使い方 計算の順序を正しく理解してバグのないコードを書く
C言語の演算子には優先順位(precedence)があり、同じ式に複数の演算子がある場合、優先順位が高い方から順に評価されます。数学でも「掛け算は足し算より先」という順序があるように、C言語でも同様のルールがあります。
| 優先順位(高い→低い) | 演算子 | 結合方向 |
|---|---|---|
| 1(最高) | () [] -> . | 左から右 |
| 2 | ++ -- ! ~ (型) * & sizeof | 右から左 |
| 3 | * / % | 左から右 |
| 4 | + - | 左から右 |
| 5 | << >> | 左から右 |
| 6 | < <= > >= | 左から右 |
| 7 | == != | 左から右 |
| 8 | & | 左から右 |
| 9 | ^ | 左から右 |
| 10 | | | 左から右 |
| 11 | && | 左から右 |
| 12 | || | 左から右 |
| 13 | ?: | 右から左 |
| 14 | = += -= *= /= など | 右から左 |
| 15(最低) | , | 左から右 |
6-1. 優先順位で起きる典型的なバグ
演算子の優先順位を完全に暗記する必要はありません。「迷ったらカッコで明示する」が安全で確実なアプローチです。カッコを使うことでコードの意図が明確になり、読み手にも伝わりやすくなります。特にビット演算子(&, |)は比較演算子(==, !=)より優先順位が低いため、組み合わせるときは必ずカッコを付けましょう。
07 PRACTICAL PATTERNS 実務でよく使う演算子パターン集 現場のCコードでよく見る演算子の活用例をまとめて紹介
演算子の使い方を覚えたら、次は実際のコードでよく見るパターンを身につけましょう。以下に実務で頻出する演算子活用パターンをまとめます。
7-1. 三項演算子(条件演算子)でIf文を短縮
三項演算子(条件演算子)? :を使うと、シンプルなif-else文を1行で書けます。
7-2. シフト演算子による高速な2の累乗演算
| よく使うパターン | コード例 | 用途 |
|---|---|---|
| 2の累乗チェック | (n & (n-1)) == 0 | nが2の累乗かどうかの高速判定 |
| 下位Nビットのマスク | n & 0xFF | 下位8ビットだけ取り出す |
| ビットのトグル | flags ^= 0x01 | 特定フラグを反転(ON/OFFトグル) |
| スワップ(XORで) | a ^= b; b ^= a; a ^= b; | テンポラリ変数なしに2値を交換 |
| 符号なし右シフトの代用 | (unsigned)n >> k | 算術シフトと論理シフトの違いを回避 |
08 CLAUDE CODE FOR C Claude CodeでC言語コードを自動生成する AIを使ってC言語学習とコード品質を同時に向上させる
C言語の演算子を学ぶとき「自分で書いたコードが合っているか確認したい」「演算子の優先順位でバグが出たが原因を調べたい」「もっと効率的なコードに書き換えたい」という悩みがよく出てきます。そこで活躍するのがClaude Codeです。
弊社(株式会社GENAI)では、Claude Max 20xプラン(月額$200)を使って開発業務を支援しています。C言語に限らず、コードのデバッグ・最適化・説明・テストケース生成まで、Claude Codeに任せることで開発効率を大幅に向上させています。
📚 用語解説
Claude Code:Anthropic社のAIエージェントツール。C言語・Python・JavaScriptなど多くのプログラミング言語に対応し、「この演算子の優先順位が原因でバグが出ている。修正して」「ビット演算子を使ってフラグ管理の実装をして」のような日本語の指示に従って、コードを自動生成・修正・説明します。
8-1. Claude Codeでできるコード支援の例
コードを貼る
「このコードの
どこがバグ?」
原因を特定
演算子優先順位・
型変換問題など
自動生成
カッコ追加や
キャスト挿入
提供
「なぜこうなるか」
を日本語で解説
同時に加速
デバッグしながら
知識が身につく
特に「なぜそのバグが起きているのか」を日本語で説明しながらコードを修正してくれる点が、Claude Codeの大きな特徴です。コードのエラーを直すだけでなく、「C言語の演算子の仕組みを理解しながら学ぶ」という使い方ができます。
まとめると、C言語の演算子学習において以下の活用が特に効果的です。
| 学習フェーズ | Claude Codeの使い方 | 期待効果 |
|---|---|---|
| 理解確認 | 「++xとx++の違いをコードで説明して」 | 概念の正確な理解を確認できる |
| デバッグ | 「このコードが期待どおり動かない。演算子の問題では?」 | バグの原因を高速に特定できる |
| コード改善 | 「このif文を三項演算子で書き直して」 | よりシンプルなコードに改善できる |
| コードレビュー | 「このCコードに演算子の優先順位バグがないか確認して」 | バグを事前に発見できる |
| 演習問題 | 「C言語の演算子を使った練習問題を5問出して」 | 実践的なスキルが身につく |
この記事では、C言語のすべての主要演算子について基礎から解説しました。最後にポイントをまとめます。
C言語開発の効率化をClaude Codeでサポートします
C言語のバグ調査・コードレビュー・自動生成まで、Claude Codeを活用した開発支援を弊社AI鬼管理が提供しています。C言語入門の学習サポートから組み込み開発の効率化まで、幅広くご相談ください。
NEXT STEP
この記事の内容を、あなたのビジネスで
実践してみませんか?
AI活用を自社で回せるようになりたい方へ
AI鬼管理
Claude Code・Cowork導入支援から業務設計・社内浸透まで実践ベースで伴走。「自社で回せる組織」を90日で作る経営者向けトレーニング。
よくある質問
Q. C言語の「%」は何の演算子ですか?
A. C言語の「%」は剰余演算子(モジュロ演算子)です。「a % b」で「aをbで割った余り」を計算します。例えば「10 % 3」は「1」になります(10÷3=3余り1)。偶数・奇数の判定(n % 2 == 0)や一定間隔での処理実行(i % 100 == 0)など、多くの実用的な場面で使われます。
Q. インクリメント演算子の前置(++x)と後置(x++)の違いは何ですか?
A. 単独で使う場合(i++; または ++i;)は同じ動作です。違いが出るのは、式の一部として使う場合です。前置(++x)は「先に+1してから式の値として使う」、後置(x++)は「現在の値を式に使ってから+1する」という動作になります。例えばy=5のとき、「z = ++y」はy=6・z=6に、「z = y++」はy=6・z=5になります。
Q. C言語の「==」と「=」の違いは何ですか?
A. 「=」は代入演算子でe変数に値を代入します。「==」は等値比較演算子でe2つの値が等しいかどうかを調べてtrueかfalseを返します。if文の条件には「==」を使います。「if (a = 5)」と書くとaに5が代入されて常にtrueになるバグが発生します。必ず「if (a == 5)」と書きましょう。
Q. 演算子の優先順位を間違えないコーディング方法はありますか?
A. カッコ「()」を積極的に使うことが最も確実な方法です。「a + b * c」が「a + (b * c)」と同じ動作でも、明示的に書きたい場合は「(a + b) * c」や「a + (b * c)」とカッコを付けることで意図が明確になります。特にビット演算子(&, |, ^)と比較演算子(==, !=)を組み合わせる場合は必ずカッコを付けてください。
Q. ビット演算子はどんな場面で使いますか?
A. ビット演算子は①フラグ管理(複数のON/OFF状態を1つの整数で管理)②組み込み/ハードウェア制御(レジスタ操作)③高速な2の累乗計算(<<と>>)④暗号化・ハッシュアルゴリズム⑤効率的なデータ圧縮——などで使われます。Web開発やスクリプト言語ではあまり使いませんが、C言語のシステムプログラミングや組み込み開発では頻出の知識です。
Q. C言語でゼロ除算が起きるとどうなりますか?
A. ゼロ除算は「未定義動作」であり、プログラムがクラッシュしたり、予期しない値を返したりします。必ず「if (b != 0)」のようにゼロチェックを事前に行ってから除算してください。浮動小数点型(float/double)のゼロ除算は「inf」(無限大)や「nan」(非数)を返すケースもあります。
Q. Claude Codeを使ってC言語を学ぶ具体的な方法を教えてください。
A. 以下の活用方法が効果的です。①「この演算子の動作を具体的なコード例で説明して」と概念を確認する②書いたコードを貼り付けて「バグがあれば指摘して」と確認する③「C言語の演算子を使った練習問題を出して」と問題演習をする④「このコードをより効率的に書き直して」とリファクタリングを学ぶ——Claude Codeは24時間対応のC言語家庭教師として使えます。
Claude Codeで業務自動化を90日で叩き込む
経営者向けの伴走型パーソナルトレーニング
Claude Code を業務に落とし込む
専門研修コース一覧
受講者本人の業務を題材に、「使いこなせる」状態になるまで伴走する研修プログラム。1対1特化型・ハンズオン・法人講座の3コースを展開中。業務特化・実装まで踏み込むタイプのClaude Code研修です。
研修コース一覧を見る →AI鬼管理へのお問い合わせ
この記事を読んで気になった方へ。
AI鬼管理の専門スタッフが、御社に最適な
業務自動化プランを無料でご提案します。




