LoginSignup
0
0

More than 3 years have passed since last update.

C言語入門 データ型の考慮

Last updated at Posted at 2021-04-21

c言語におけるデータ型への配慮

今までpythonしか触ったことがなく、最近になってc言語の勉強を始めたのだがデータ型への配慮が足りなくて、ケアレスミスを起こした。自分への戒めとしてここに記事にしておく。

c言語では異なるデータ型同士で演算を行うときにはキャストが行われ、片方のデータ型に変換が行われる。
 変数やオブジェクトを宣言する時に定義した型とは型の方に変換することを型変換という。型変換には明確に記述しないでも自動で行われる暗黙的型変換明示的型変換(キャスト)がある。
暗黙的型変換では基本的に型の精度が高い方に合わせられるが、商を求める場合などでは、暗黙的型変換が行われない場合があり、その場合望んだ結果が得られない場合がある。そこで、エラーを避けるためにキャスト(明示的型変換)を行う。

 これには明確なランクがある。ランクも重要であるが今回私の犯した間違いはそこではないので割愛する。

 型変換はchar型にも対応しており、int型からchar型に型変換することもできる。また、ポインタ型へのキャストもある。ポインタについては現在勉強中なので、ポインタについての記事を書いた時にそちらの方で説明できればと思う。

 混合演算の勉強過程で以下のようなコードを書いた。

main()
{
    char c1, c2, c3;
    int i1, i2, i3;
    float f1, f2, f3;

    c1 = 'x';
    c2 = 1000;
    c3 = 6.02e23;
    printf("%c %c %c\n", c1, c2, c3);

    i1 = 'x';
    i2 = 250;
    i3 = 6.02e23;
    printf("%c %c %c\n", i1, i2, i3);

    f1 = 'x';
    f2 = 14;
    f3 = 1.603e19;
    printf("%c %c %c\n", f1, f2, f3);
}

このコードの実行結果は以下のようになる。

x \350 \300
x \372 7
    7
Program ended with exit code: 0

このコードの間違いはフォーマット指定子が全て%cになっておりcharにしか対応できなくなっている点にある。
正しいコードは以下のようになる

main()
{
    char c1, c2, c3;
    int i1, i2, i3;
    float f1, f2, f3;

    c1 = 'x';
    c2 = 1000;
    c3 = 6.02e23;
    printf("%c %c %c\n", c1, c2, c3);

    i1 = 'x';
    i2 = 250;
    i3 = 6.02e23;
    printf("%d %d %d\n", i1, i2, i3);

    f1 = 'x';
    f2 = 14;
    f3 = 1.603e19;
    printf("%f %f %f\n", f1, f2, f3);
}

実行結果は

x \350 \260
120 250 989593624
120.000000 14.000000 16029999923671859200.000000
Program ended with exit code: 0

となる。
これは1行目が全て文字型(char)、2行目が整数型(int)、3行目が浮動小数点型(float)で表されている。

ちなみに、全て正しいフォーマット指定子で出力してあげると以下のようなコードと結果になる。

main()
{
    char  h1;
    int h2;
    float h3;

    h1 = 'x';
    h2 = 1000;
    h3 = 1.603e19;

    printf("%c %d %f\n", h1, h2, h3);

}
x 1000 16029999923671859200.000000
Program ended with exit code: 0

参考URL

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0