C言語学習ポータル(無料版) 学習コンテンツ 変数・型・演算子 bool型と真偽——C23標準の書き方

📦 変数・型・演算子

bool型と真偽——C23標準の書き方

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

🎯 C23のbool/true/falseをそのまま使い、Cにおける真偽(0が偽・0以外が真)を説明できる

「はい/いいえ」「オン/オフ」「合格/不合格」。2つに1つの値を扱う型がboolです。C23からは、何の準備もなくそのまま書けます。

C23の書き方

#include <stdio.h>

int main(void) {
    bool goukaku = true;
    bool kesseki = false;

    printf("%d %d\n", goukaku, kesseki);
    return 0;
}

出力は 1 0。bool・true・false はC23で正式なキーワードになりました。古い記事にある #include <stdbool.h> はもう要りません(書いてもエラーにはなりません)。C99〜C17では型名が _Bool で、stdbool.h が別名を用意していた、という歴史です。

Cにおける真と偽

ルールはとても単純です。

・0 が偽
・0以外はすべて真(1でも -5 でも 3.14 でも真)

#include <stdio.h>

int main(void) {
    bool a = 5;    // 0以外なので true
    bool b = 0;    // false
    bool c = -1;   // これも true

    printf("%d %d %d\n", a, b, c);
    return 0;
}

出力は 1 0 1。bool に入れた値は 0 か 1 に正規化されます。5 を入れても、中身は 1 です。

比較の結果も真偽値

#include <stdio.h>

int main(void) {
    int tensuu = 72;
    bool goukaku = (tensuu >= 60);

    printf("合格判定: %d\n", goukaku);
    printf("そのまま : %d\n", tensuu >= 60);
    return 0;
}

>= や == といった比較演算子の結果は、真なら1、偽なら0です。判定結果をいったん bool の変数にしまっておくと、条件が長くなったときにコードが読みやすくなります(条件分岐そのものはトラック6で扱います)。

罠・注意

表示は 1 / 0。 %d で出しても true や false という文字は出ません。文字で出したいなら自分で切り替えます。

bool に入れると情報が減る。 bool n = 100; は 1 になり、100 は失われます。数として使う値を bool に入れてはいけません。

「真=1」とは限らない。 bool に入れれば1ですが、int のままなら 5 も -1 も真です。if (x == 1) と if (x) は同じではありません。

ビットCの世界では「0じゃなければ真」。この一言だけ覚えておけば、条件文で迷わなくなるよ。

まとめ

C23では bool / true / false をそのまま書けます(stdbool.h 不要)。0が偽、0以外はすべて真。比較の結果は 1 か 0 で、bool に代入した値は 0/1 に正規化されます。

要点まとめ

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

この項目に出てくる用語

bool型ぶーるがた

true(真)かfalse(偽)のどちらかしか入らない型のこと。C23では標準の書き方としてbool・true・falseがそのまま使えるようになった。従来は0と1で真偽を表していたが、C23の書き方の方が意図が伝わりやすい。

演算子えんざんし

+や-、==など、値どうしを計算したり比較したりするための記号のこと。演算子ごとに計算される優先順位があらかじめ決まっている。+ - * / のような算術演算子のほか、比較や論理の演算子も含まれる。

型かた

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

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

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

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

完全版(BOOTH)を見る

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

Web版 / BOOTH