
C言語基礎|7章のまとめ
第7章で学んだ「型・ビット・定数・変換」を一気に整理!―“迷わないC”のための総まとめ。
第7章は、C言語の土台になる話がぎゅっと詰まった章でした。
型の分類、ビット表現、ビット演算、定数の書き方、オーバフロー、浮動小数点、そして型変換ルールまで。
ここで大事なのは、項目をバラバラに覚えることじゃなくて、
- なぜそのルールがあるのか
- どこで実際のバグにつながるのか
- どの知識が次の知識の前提なのか
この“つながり”を作ることです。
そのために、表と小さな図で「全体地図」を作っていきますね。

第7章で扱った内容の全体マップ
まずは章全体を、テーマごとにまとめます。
第7章のテーマ一覧(何を学んだ章だった?)
| テーマ | 何が分かるようになる? | つまずきやすい点 |
|---|---|---|
| 算術型の分類 | 整数型と浮動小数点型の違いが説明できる | char が整数扱いなこと |
| 整数型の signed/unsigned | 負数があるかないかが変わる | signed/unsigned 混在の比較 |
| 表現範囲と limits.h | その型の最小・最大が確認できる | 環境で値が違うこと |
| sizeof と size_t | 型のサイズを安全に扱える | size_t が unsigned 系 |
| typedef | 型名の別名を作れる | 読みやすさと乱用の境目 |
| ビット表現 | 0/1 の並びが値になる仕組み | 符号付きの表現方式 |
| ビット演算・シフト | フラグ操作や高速化ができる | 負数シフトの処理系依存 |
| 定数(整数/浮動小数点) | 10進/8進/16進、接尾語が使える | 013 の罠、L と l |
| オーバフロー | signed は危険、unsigned は剰余 | signed のオーバフローの扱い |
| 浮動小数点の誤差 | 0.1 が正確に表せない理由 | 繰返し制御に使う危険 |
| 演算子の優先順位・結合性 | 式の解釈が読める | 思い込みの優先順位 |
| 整数拡張と通常の算術型変換 | 型が勝手に変わる理由が分かる | unsigned に寄る事故 |
表の説明
この表は「第7章の要点」を“目的ベース”でまとめたものです。
右端の「つまずきやすい点」を見ておくと、復習の効率が一気に上がります。
算術型の分類:まずはここがスタート
第7章の最初に押さえたいのは「算術型」の分類です。
主要な算術型
| 分類 | 中身 | 代表例 | できること |
|---|---|---|---|
| 整数型 | 連続した整数(有限範囲) | char, short, int, long, long long, enum | ビット演算、正確な整数計算 |
| 浮動小数点型 | 実数を近似で表す | float, double, long double | 小数計算、広い範囲の値 |
表の説明
整数は「正確」、浮動小数点は「近似」です。
この違いが、繰返し制御や比較で大きな差になります。
signed と unsigned:同じビットでも意味が変わる
図:同じビット列でも読み方が変わる(文章図)

図の説明
ビット列は同じでも、signed/unsigned の“解釈ルール”が違うので値が変わります。
この意識があると、バグの原因が追いやすくなります。
signed/unsigned の違い(超要点)
| 観点 | signed | unsigned |
|---|---|---|
| 負数 | 扱える | 扱えない |
| 範囲 | だいたい半分が負側に割り当て | 0 から最大まで |
| オーバフロー | 危険(環境依存・想定外になりやすい) | 剰余で回る(規則が明確) |
表現範囲と limits.h:数字は“確認”できる
処理系依存の値は、limits.h にまとめられています。
よく使う limits.h の代表
| マクロ | 意味 | 使う場面 |
|---|---|---|
| INT_MIN, INT_MAX | int の最小/最大 | オーバフロー対策、入力チェック |
| UINT_MAX | unsigned int の最大 | 剰余計算の理解 |
| CHAR_BIT | char のビット数 | ビット列処理、可搬性確認 |
表の説明
「この環境の int は何ビット?」みたいな話は、推測せず limits.h で確認するのが基本です。
sizeof と size_t:サイズはこの2つで語る
sizeof の要点
| 項目 | 内容 |
|---|---|
| sizeof が返す型 | size_t |
| size_t の性質 | 符号無し整数型 |
| 何を測る | 型やオブジェクトのバイト数 |
表の説明
サイズは負にならないので、size_t が unsigned 系になっています。
このせいで比較時に unsigned に寄る事故が起きやすいので、頭の片隅に置いておくと安心です。
typedef:型の別名で読みやすくする
typedef の基本
| 書式 | 意味 |
|---|---|
| typedef 既存型 新しい名前; | 型の別名を作る |
何をする命令なのか
typedef は「新しい型を作る」ではなく、「別名を作る」宣言です。
読みやすさのために使うのが王道です。
ビット演算とシフト:フラグ操作の基本道具
ビット演算子(超頻出)
| 演算 | 記号 | 何をする? | よくある用途 |
|---|---|---|---|
| AND | & | 両方1のビットだけ1 | 指定ビットだけ取り出す |
| OR | | | どちらか1なら1 | 指定ビットを立てる |
| XOR | ^ | 片方だけ1なら1 | 指定ビットを反転 |
| 補数 | ~ | 全ビット反転 | マスク作り、反転 |
シフト演算子
| 演算子 | 形式 | 何をする? |
|---|---|---|
| << | a << b | 左に b ビットずらし、空きは0 |
| >> | a >> b | 右に b ビットずらす |
注意(まとめとして大事)
負数の右シフトは、論理シフトか算術シフトかが環境依存になりやすいので、原則避けるのが安全です。
整数定数と接尾語:見た目で型が変わる
整数定数の基数
| 表記 | 例 | 意味 |
|---|---|---|
| 10進 | 13 | 10進の13 |
| 8進 | 013 | 10進の11(先頭0) |
| 16進 | 0x12 | 10進の18(0x) |
整数接尾語
| 接尾語 | 意味 |
|---|---|
| U | unsigned を明示 |
| L | long を明示 |
| LL | long long を明示 |
表の説明
接尾語は「この定数はこの型として扱ってね」という指示です。
数字の大きさと接尾語と環境の範囲が組み合わさって、最終的な型が決まります。
オーバフロー:signed と unsigned で世界が違う
オーバフローのまとめ
| 型 | 範囲を超えたら? | まとめの一言 |
|---|---|---|
| signed | 想定外になりやすい(環境依存の挙動に触れやすい) | できるだけ起こさない設計 |
| unsigned | 最大値+1 で割った剰余になる | ルールが明確で予測しやすい |
表の説明
unsigned は“ぐるっと回る”ルールがあるので、挙動が読めます。
signed は「超えない」ように作るのが基本方針です。
浮動小数点:正確さより“扱える範囲”と“精度”
浮動小数点型の特徴
| 型 | ざっくり特徴 | 使いどころ |
|---|---|---|
| float | 軽いが精度は低め | メモリ節約、軽量計算 |
| double | 標準的で扱いやすい | 基本はこれ |
| long double | 精度や範囲を増やせることがある | 高精度計算 |
重要:繰返し制御に浮動小数点を使うと危険
- 0.01 を100回足しても 1.0 にならないことがある
- そのせいで、等しい比較でループ終了しないことがある
だから、繰返しのカウンタは整数にするのが基本です。
演算子の優先順位・結合性:読み方のルール
第7章で特に重要な優先順位(よく使うものだけ)
| だいたいの順(高→低) | 例 | ポイント |
|---|---|---|
| 単項(! ~ ++ -- (型) sizeof) | !x, ~x | まず単体に効く |
| 乗除剰余 | a * b, a / b, a % b | + より先 |
| 加減 | a + b, a - b | いつもの算数 |
| シフト | x << n, x >> n | さらに下 |
| 比較 | < <= > >= | 真偽になる |
| 等価 | == != | 比較より後 |
| ビットAND/XOR/OR | & ^ | | 論理とは別物 |
| 論理AND/OR | && || | 短絡評価あり |
| 代入 | = += -= ... | 右結合 |
表の説明
「思い込みで読む」と間違えやすいので、式は括弧で意図を固定するのが安全です。
整数拡張と通常の算術型変換:勝手に型が変わる理由
まとめとして一言で言うと、
- 小さい整数は計算前に持ち上げられる(整数拡張)
- 2項演算では左右の型をそろえる(通常の算術型変換)
この2段構えがあるから、signed/unsigned 混在で事故が起きます。
ここまで理解できていれば、第7章の狙いはかなり達成できています。
サンプルプログラム(まとめ確認用)
章の要点を「一度に軽く確認できる」シンプルなプログラム例です。
プロジェクト名:chap7-29-1 ソースファイル名:chap7-29-1.c
#include <stdio.h>
#include <limits.h>
int main(void)
{
int a = INT_MAX;
unsigned int b = 1U;
printf("第7章まとめチェック:型と範囲を確認します。\n");
printf("INT_MAX は %d です。\n", a);
// unsigned の “回る”挙動を軽く観察(例として UINT_MAX を使う)
unsigned int u = UINT_MAX;
printf("UINT_MAX は %u です。\n", u);
printf("UINT_MAX に 1 を足すと %u になります。\n", u + 1U);
// sizeof と size_t(unsigned 系)を意識する
printf("int のサイズは %zu バイトです。\n", sizeof(int));
printf("double のサイズは %zu バイトです。\n", sizeof(double));
// ビット演算の超ミニ確認
unsigned int x = 6U; // 0110
printf("x = 6 のとき、x | 1 は %u です。\n", x | 1U);
return 0;
}登場する命令(書式)と、何をする命令なのか
printf
書式
printf(書式文字列, 引数1, 引数2, ...);
何をする?
値を表示します。まとめ確認では「環境依存の値を目で見る」目的で使います。
sizeof
書式
sizeof(型)
sizeof 式
何をする?
型やオブジェクトのバイト数を返します。返り値は size_t です。
演算子(+ や | など)
書式
a + b
a | b
何をする?
- は算術演算、| はビット単位ORです。
同じ “OR” でも || とは別物なので注意、というのが第7章の重要点でした。
