📦 変数・型・演算子
🎯 暗黙の型変換が起きる方向を知り、キャストで意図を明示できる
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言語にはあらかじめ複数の型が用意されている。
小数を含む数値を扱うための型のこと。floatより広い範囲と高い精度を持ち、実数計算における標準的な選択肢として使われる。小数点以下の桁数が多い計算でも、比較的高い精度を保てるのが特徴。
もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。