C言語学習ポータル(無料版) 学習コンテンツ 変数・型・演算子 2進数・16進数リテラル(0b / 0x / 桁区切り')

📦 変数・型・演算子

2進数・16進数リテラル(0b / 0x / 桁区切り')

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

🎯 0b・0x・8進の書き方の違いを理解し、C23の桁区切りで読みやすく数値を書ける

コードに直接書いた数値をリテラルと呼びます。同じ「10」でも書き方はいくつもあり、C23では表現が増えて、意図がより伝わりやすくなりました。

4つの書き方、同じ値

#include <stdio.h>

int main(void) {
    int juu_10 = 10;       // 10進数
    int juu_2  = 0b1010;   // 2進数(C23で標準)
    int juu_16 = 0xA;      // 16進数
    int juu_8  = 012;      // 8進数(先頭の0が目印)

    printf("%d %d %d %d\n", juu_10, juu_2, juu_16, juu_8);
    return 0;
}

出力は 10 10 10 10。4つとも同じ値です。書き方が違うだけで、メモリに入る中身は変わりません。人間にとって読みやすい形を選べばよい、ということです。

・0b … 2進数。ビットを1つずつ見せたいとき(トラック21で本領を発揮します)
・0x … 16進数。1桁で4ビットを表せるので、メモリやカラーコードの表現に便利
・先頭の 0 … 8進数。意図せず使ってしまう罠(後述)

桁区切り——C23の読みやすさ

#include <stdio.h>

int main(void) {
    int jinkou = 125'000'000;
    int yosan  = 1'200'000;
    int bits   = 0b1010'1100;

    printf("%d %d %d\n", jinkou, yosan, bits);
    return 0;
}

C23から、数値の途中に '(シングルクォート)を入れて桁を区切れます。125000000 と 125'000'000 では、読み間違えにくいのは明らかに後者です。3桁ずつでも4ビットずつでも、好きな位置に置けます。区切りは値に一切影響しません。

16進・8進で表示する

#include <stdio.h>

int main(void) {
    int n = 255;

    printf("10進 %d\n", n);
    printf("16進 %x\n", n);
    printf("16進 %X\n", n);
    printf("8進 %o\n", n);
    return 0;
}

出力は 255 / ff / FF / 377。C23では2進表示の %b も追加されましたが、コンパイラの対応にばらつきがあるため、当面は %x が無難です。

罠・注意

先頭の0は8進数。 int t = 012; は10です。int t = 09; に至ってはエラーになります(8進に9は無いため)。時刻や日付を 0930 のように0埋めで書くと、静かに別の値になります。数値の先頭に0を書かないが鉄則です。

0b と ' はC23の機能。 古いコンパイラでは通りません(gccなら -std=c23 または -std=c2x を付けます)。

桁区切りは表示には出ない。 125'000'000 を printf しても 125000000 と出ます。区切りはソースコードの中だけの話です。

ビット0x は「ビットを4つずつ見る眼鏡」。慣れるとメモリの中身が読めるようになるよ。

まとめ

10進・2進(0b)・16進(0x)・8進(先頭0)は、書き方が違うだけで同じ値です。C23では ' で桁を区切れて、長い数値が一気に読みやすくなります。先頭0の8進は事故のもと。表示は %x %o、C23なら %b もあります。

要点まとめ

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

この項目に出てくる用語

int型いんとがた

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

書式指定子しょしきしていし

printfやscanfで使う%dや%fのような記号のこと。続けて渡す値をどんな型・どんな見た目として扱うかを指定する役割を持つ。指定する型と実際に渡す値の型がずれると、思わぬ表示結果になることがある。

printfぷりんとえふ

文字や数値を書式指定に従って画面に表示する標準ライブラリの関数のこと。C言語で最も使う頻度が高い関数のひとつに数えられる。%dで整数、%fで小数、%sで文字列というように、値の種類ごとに書式を使い分ける。

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

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

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

完全版(BOOTH)を見る

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

Web版 / BOOTH