Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語の書式指定子%dと%iの違いを徹底解説

C言語のprintf関数などで使われる書式指定子には「%d」と「%i」があります。この2つはよく似ていますが、それぞれ役割や挙動に特徴があります。本記事では、サンプルコードと実行結果をもとに、両者の違いをわかりやすく解説します。

書式指定子 %d とは

%d は、整数値を符号付き10進整数として出力するための書式指定子です。値が正でも負でも、必ず10進形式で表示されます。

%d の使用例

以下は、C言語で書式指定子 %d を使用したサンプルプログラムです。

#include <stdio.h>
int main() {
    int v1 = 7456;
    int v2 = -17346;
    printf("10進数形式の値 : %d\n", v1);
    printf("負の値 : %d", v2);
    return 0;
}

実行結果

10進数形式の値 : 7456
負の値 : -17346

このように、%d を使うと正の整数はそのまま、負の整数はマイナス記号付きで、いずれも10進数として出力されます。

書式指定子 %i とは

%i は、整数値を10進数・8進数・16進数のいずれかの形式で扱える書式指定子です。8進数は先頭に「0」を付け、16進数は先頭に「0x」を付けて表現します。

%i の使用例

次に、C言語で書式指定子 %i を使用したサンプルプログラムを見てみましょう。

#include <stdio.h>
int main() {
    int v1 = 1327;
    int v2 = 0x42451;
    printf("10進数形式の値 : %d\n", v1);
    printf("16進数形式の値 : %i", v2);
    return 0;
}

実行結果

10進数形式の値 : 1327
16進数形式の値 : 271441

この例では、16進数リテラル 0x42451 を %i で出力すると、10進数に変換された値「271441」が表示されます。

%d と %i の違いまとめ

printf関数では、%d と %i はまったく同じ動作をします。どちらを使っても出力結果に差はありません。

一方、scanf関数で入力を読み込む場合には違いが現れます。%d は入力を常に10進数として解釈しますが、%i は入力の先頭を判別し、「0x」で始まる場合は16進数、「0」で始まる場合は8進数として自動的に解釈します。用途に応じて適切な書式指定子を選択することが重要です。

  1. MEAN.jsとMEAN.ioの違いは?本質的な共通点と選び方をわかりやすく解説

    MEANスタックとは?「MEAN」とは、Webアプリケーション開発で使われる次の4つの技術の頭文字を取った略称です。MongoDB:ドキュメント指向のNoSQLデータベースExpress:Node.js向けの軽量WebアプリケーションフレームワークAngular:Googleが中心となって開発するフロントエンドフレームワークNode.js:サーバーサイドでJavaScriptを実行できるランタイム環境これらを組み合わせることで、フロントエンドからバックエンド、データベースまでをすべてJavaScriptで統一して開発できるのが、MEANスタック最大の魅力です。MEAN.jsとMEAN.ioは本

  2. CellpaddingとCellspacingの違いとは?HTMLテーブルの余白設定をわかりやすく解説

    HTMLで表(テーブル)を作成する際、セル内やセル同士の余白を調整したい場面は多くあります。そのときに登場するのが「cellpadding」と「cellspacing」という2つの属性です。名前は似ていますが、役割はまったく異なります。本記事では、それぞれの特徴と具体的な使い方、そして両者の違いについて詳しく解説します。Cellpadding(セルパディング)とは単一のセルに対して作用する属性です。セルの枠線(ボーダー)とセル内のコンテンツ(文字や画像など)との間の余白を調整します。デフォルト値は1(ピクセル)です。コンテンツが枠に密着して見づらくなるのを防げるため、視認性向上に効果的な手法と