printf関数の詳細な分析

知識ポイント1:printf関数の計算式を利用する

          1) printf("XXX プレースホルダー 1 XXX プレースホルダー 2 XXX プレースホルダー 3"、1 を置換、2 を置換、3 を置換);

例:

#include <stdio.h>
int main()
{
int a = 1;
float b = 2.345;
char c = 'a';
printf("整型a为%d 浮点b为%f 字符c为%c 字符c对应的ASCII码为%d", a, b, c, c);
return 0;
}

知識ポイント2:printf関数の使い方

          1) printf は可変パラメータ関数です。(パラメータの数と種類は未定義です);

                a) パラメータの数が不明であり、パラメータの種類も不明です。

printf("%d", 1); // 两个参数
printf("%d %f", 1, 2.3); // 三个参数
printf("%d %f %c", 1, 2.3, 'H'); // 四个参数

        2) 最初のパラメータは文字列である必要があります。

        3) 最初のパラメータには、出力する必要がある文字と置換する必要があるプレースホルダが含まれます。

        4) 2 番目以降のパラメーターは、プレースホルダーを順番に置き換えます。

        5) プレースホルダーのタイプと数は、後続のパラメーターのタイプと数に対応する必要があります。

知識ポイント 3: 整数型のプレースホルダー

          1) 符号付き整数の型昇格。(符号付きビット付き整数型 char、short の場合、printf の変数パラメーターが渡されると、int に昇格されます。int より大きい整数型は変更されません);

               a) int よりも低いレベルは intl に昇格します。

               b) char、short、int を処理する場合、%d を使用してスペースを占有することができます。

               c) %ld を使用してスペースを長時間占有します。より高度な Long Long を使用するには、%lld を使用してスペースを占有する必要があります。

結論: char、short、int には %d を使用します。長い間は %ld を使用します。long long は %lld を使用します。

          2) 符号なし整数型の型昇格。

                a) 符号なしビット整数 unsigned char および unsigned short の場合、printf の変数パラメータが渡されると、それらは unsigned int に昇格されます。

                b) unsigned int より大きい整数型は変更されません。

                c) 符号なし整数の場合、最上位ビットが符号ビットではなくデータ ビットとしてみなされることを示すために、d を u に置き換える必要があります。

結論: unsigned char、unsigned short、unsigned int には %u を使用します。unsigned long には %lu を使用します。unsigned long long は %llu を使用します。

          3) 浮動小数点型の型昇格。

               a) float は double に昇格されますが、double は変更されません。

結論: float と double は両方とも %f を使用します。

知識ポイント4:変換仕様

          1)変換操作d;

#include <stdio.h>
int main()
{
char c1 = 127;
short s1 = 32767;
int n1 = 2147483647;
char c2 = -128;
short s2 = -32768;
int n2 = -2147483648;
printf("%d\n", c1);
printf("%d\n", s1);
printf("%d\n", n1);
printf("%d\n", c2);
printf("%d\n", s2);
printf("%d\n", n2);
return 0;
}

      変数 c1、s1、c2、および s2 はすべて int よりも低レベルの整数型です。printf を入力すると int に変換されます。したがって、変換操作 d を使用して sizeof(int) バイトのバイナリ データを取得し、符号付き整数型に従って文字に変換し、コンソールに出力します。

            2) 変換演算 u;

#include <stdio.h>
int main()
{
unsigned char c1 = 0;
unsigned short s1 = 0;
unsigned int n1 = 0;
unsigned char c2 = 255;
unsigned short s2 = 65535;
unsigned int n2 = 4294967295;
printf("%u\n", c1);
printf("%u\n", s1);
printf("%u\n", n1);
printf("%u\n", c2);
printf("%u\n", s2);
printf("%u\n", n2);
return 0;
}

      変数 c1、s1、c2、および s2 はすべて、unsigned int よりも低レベルの整数型です。これらは、printf を入力するときに unsigned int に変換されます。したがって、変換操作 u を使用して sizeof (unsigned int) バイトのバイナリ データを取得し、それらを符号なし整数型に従って文字に変換し、コンソールに出力します。

         3) 変換演算 d と u の誤用 signed int と unsigned int の値の範囲が一致しないため、データ型と変換演算が一致しないと、誤った変換結果が得られる可能性があります。

         4)変換操作c;

#include <stdio.h>
int main()
{
char c = 65;
short s = 66;
int n = 67;
printf("c=%d\n", c);
printf("s=%d\n", s);
printf("n=%d\n", n);
printf("c=%c\n", c);
printf("s=%c\n", s);
printf("n=%c\n", n);
return 0;
}

       変数 c、s、n は int 以下の整数型です。printf を入力すると int に変換されます。したがって、変換操作 c を使用して sizeof(int) バイトのバイナリ データを取得し、その値をその値に対応する ASCII 文字に変換して、コンソールに出力します。

         5) 変換演算 f、e、E。

#include <stdio.h>
int main()
{
float f = 1.234;
double df = 1.234567;
printf("%f\n", f);
printf("%f\n", df);
return 0;
}

     変数 f および df は double 以下の整数型です。printf を入力すると double に変換されます。したがって、変換演算 f を使用して、sizeof(double) バイトのバイナリ データを取得し、倍精度浮動小数点型に従って文字に変換し、コンソールに出力します。

#include <stdio.h>
int main()
{
float f = 1.234;
double df = 1.234567;
printf("%e\n", f);
printf("%e\n", df);
printf("%E\n", f);
printf("%E\n", df);
return 0;
}

       変換演算 e、E は f と似ていますが、e カウントを使用します。e と E の違いは、一方は小文字の e を使用し、もう一方は大文字の E を使用することです。

         6) 変換演算 o、x、X。

#include <stdio.h>
int main()
{
unsigned int n = 123456;
printf("%u\n", n); // 十进制
printf("%o\n", n); // 八进制
printf("%x\n", n); // 十六进制,小写字母
printf("%X\n", n); // 十六进制,大写字母
return 0;
}

        a) o、x、X 変換操作により、sizeof (unsigned int) バイトのバイナリ データが取得されます。

        b) o符号なし整数型に従ってデータを 8 進数文字に変換し、コンソールに出力します。

        c) x, X は、符号なし整数型に従ってデータを 16 進文字に変換し、コンソールに出力します。

        d) x と X の違いは、一方は小文字を使用し、他方は大文字を使用することです。

    7) 変換操作。

#include <stdio.h>
int main()
{
printf("%s", "Hello World\n");
return 0;
}

      s 変換では、sizeof(char *) バイトのバイナリデータが得られ、これを文字列の先頭アドレスとみなし、先頭アドレスから文字列を出力します。 

おすすめ

転載: blog.csdn.net/m0_73463638/article/details/127042922