C言語学習ポータル(無料版) 学習コンテンツ 変数・型・演算子 型変換——暗黙と明示

📦 変数・型・演算子

型変換——暗黙と明示

無料公開版に収録・読む目安 12分

🎯 暗黙の型変換が起きる方向を知り、キャストで意図を明示できる

Cは型の違う値どうしの計算を、黙って調整して実行します。便利ですが、黙っているぶん事故にも気づきにくい。自動で起きる変換と、自分で指示する変換を分けて押さえます。

暗黙の型変換——自動で起きる

#include <stdio.h>

int main(void) {
    int    n = 3;
    double d = 1.5;
    double kekka = n + d;   // n が 3.0 に変換されてから足される

    printf("%.1f\n", kekka);
    return 0;
}

出力は 4.5。intとdoubleを混ぜると、情報が失われない方向(int → double)へ揃えてから計算されます。これが暗黙の型変換です。char と int を混ぜたときも同じで、char が int に格上げされます。

逆向きは削られる

#include <stdio.h>

int main(void) {
    double nedan = 199.9;
    int    seisuu = nedan;    // 小数点以下が消える
    char   chiisai = 300;     // char に収まらない

    printf("%d\n", seisuu);
    printf("%d\n", chiisai);
    return 0;
}

seisuu は 199 です。四捨五入ではなく切り捨て。chiisai は 300 にはならず、44 のような別の値になります(1バイトに300は入らないため)。どちらもエラーにはならず、警告が出る程度で通ってしまいます。

明示の型変換(キャスト)——自分で指示する

#include <stdio.h>

int main(void) {
    int tokuten = 173;
    int ninzuu = 4;

    printf("%.2f\n", (double)tokuten / ninzuu);
    printf("%d\n", (int)(3.7 + 0.5));
    return 0;
}

(型名)値 と書くのがキャストです。1つ目は 43.25——(double) を片方に付けるだけで、計算全体が小数の世界に移ります。2つ目は 4。+0.5 してから (int) で切り捨てることで、正の数の四捨五入になります(定番の書き方です)。

罠・注意

キャストは「変換の命令」であって「安全宣言」ではない。 (char)300 と書けば警告は消えますが、値は壊れたままです。警告を消すためだけのキャストは、バグを隠す行為になります。

割り算のキャストは「割る前」に。 (double)(a / b) では手遅れ。(double)a / b と書きます。

double → int は常に切り捨て。 -2.7 は -2 です(0の方向へ)。

大きい型へは安全、小さい型へは危険。 int → double は安全、double → int や long long → int は情報が消えます。

ビット「自動で合わせてくれる」は、裏を返すと「勝手に決められる」。型を混ぜるときだけは、どっちに揃うか意識してみて。

まとめ

型が混ざると、情報が失われない方向(int → double)へ自動で揃えられます。逆向きの代入では切り捨てや情報落ちが黙って起きます。意図があるときは (double) のようにキャストで明示し、割り算では必ず「割る前に」変換します。

要点まとめ

アプリで演習問題まで解く(無料・登録不要)

この項目に出てくる用語

キャストきゃすと

(int)や(double)のように型名を()で書いて、値を別の型へ明示的に変換すること。意図をはっきり示して事故を防ぐための書き方。int同士の割り算を小数で得たいときなど、意図的に型を変えたい場面で使う。

型かた

変数に入れられる値の種類と、確保するメモリの大きさを決める分類のこと。箱の形や大きさを決めるルールのようなものだと考えるとよい。int・double・charなど、C言語にはあらかじめ複数の型が用意されている。

int型いんとがた

整数を扱うための基本的な型のこと。小数点を持たない数値を格納する、C言語でもっとも使う機会の多い型のひとつにあたる。環境にもよるが、多くの場合4バイトの大きさで値を保持している。

double型だぶるがた

小数を含む数値を扱うための型のこと。floatより広い範囲と高い精度を持ち、実数計算における標準的な選択肢として使われる。小数点以下の桁数が多い計算でも、比較的高い精度を保てるのが特徴。

char型きゃらがた

1文字を表すための型のこと。実体は小さな整数であり、文字コード表に基づいて数値と文字が対応づけられている。'A'のようにシングルクォートで1文字を囲んで書き表す。

同じトラックのほかの項目

変数とは名前付きの箱宣言・代入・初期化を区別し、型のついた変数を正しく作って使える int型と整数の世界intの範囲と限界値の調べ方を知り、long long・unsignedの使いどころが分かる 浮動小数点数 float / doubledoubleを既定として使い分け、小数に必ず誤差があることと比較の作法を理解する char型と文字コードcharが1バイトの小さな整数であることを理解し、文字と数値を相互に変換できる bool型と真偽——C23標準の書き方C23のbool/true/falseをそのまま使い、Cにおける真偽(0が偽・0以外が真)を説明できる 定数——const と constexprconstとconstexpr(C23)を使い分け、変わらない値を宣言時に固定できる 算術演算子と優先順位5つの算術演算子と優先順位を理解し、複合代入・インクリメントを正しく使える 整数の割り算と剰余の罠整数どうしの割り算が切り捨てになる理由を理解し、平均計算などで正しく対処できる 2進数・16進数リテラル(0b / 0x / 桁区切り')0b・0x・8進の書き方の違いを理解し、C23の桁区切りで読みやすく数値を書ける sizeofとメモリ上のサイズsizeofで型と変数のバイト数を測り、型ごとに箱の大きさが違うことを実感できる オーバーフローという事件オーバーフローが起きる仕組みと危険性を理解し、桁の見積もりと予防策を実行できる
‹ 整数の割り算と剰余の罠 2進数・16進数リテラル(0b / 0x / 桁区切り') ›

もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。

完全版(BOOTH)を見る

📚 姉妹教材:手を動かして覚える Linux 教材 — Linuxとインフラの仕組みを地図で学ぶ

Web版 / BOOTH