これまで、int型、double型、そしてchar型という3つのデータ型を使ってきました。

ここでは、

基本データ型

char型

char型は、文字を表します。 整数として扱うことができます。

符号付き整数型

これまで使ってきたint型は、符号付きの整数を表します。 符号付きであることは省略できるので、これまでは省略していました。 省略せずに書くと、signed int型です。

int型の記憶容量(サイズ)を基本として、int型より小さいサイズにしたり、大きいサイズにすることができます。

符号付き整数型をサイズの小さい順に並べると、次のようになります。

  • signed char
  • short (signed short)
  • int (signed int)
  • long (long int, signed long int)
  • long long (long long int, signed long long int)

ただし、実際のサイズは実行環境に依存します。 long型とlong long型のサイズが同じという環境もあります。

符号なし整数型

符号なし整数型は、符号付きであることを表すsignedの代わりに、unsignedと書いて表します。

また、C99から、0または1で論理値を表す_Bool型が追加されました。

符号なし整数型をサイズの小さい順に並べると、次のようになります。

  • _Bool
  • unsigned char
  • unsigned short int (unsigned short)
  • unsigned int
  • unsigned long (unsigned long int)
  • unsigned long long (unsigned long long int)

浮動小数点型

double型は、倍精度の浮動小数点数を表します。 浮動小数点数については、計算機アーキテクチャーや数値解析Iの授業できちんと勉強してください。

浮動小数点数型には、double型の半分のサイズのfloat型と、double型よりも大きなサイズのlong double型があります。

(実数を表す)浮動小数点数型をサイズの小さい順に並べると、次のようになります。

  • float
  • double
  • long double

また、C99から、複素数を表す型(型名の後ろに_Complexが付く)が追加されました。

複素数を表す浮動小数点数型をサイズの小さい順に並べると、次のようになります。

  • float _Complex
  • double _Complex
  • long double _Complex

符号付き整数型と符号なし整数型の違い

符号付き整数型では、先頭ビットが符号を表します。 符号なし整数型には、符号を表すビットは存在しません。

このため、符号なし整数型は、符号付き整数型の約2倍の範囲の数を表すことができます。

次のプログラムは、8ビットの大きさの符号付きchar型と符号なしchar型に、8ビット符号なし整数の最大値である255を代入して表示します(プログラム1)。

    signed char sc = 255;
  unsigned char uc = 255;

  printf(">> %d\n", sc);
  printf(">> %d\n", uc);

これを実行すると、次のようになります。

luna% a.out
>> -1
>> 255

255は、2進数で表すと 11111111 ですが、符号付き整数では負の数を2の補数として表現するので、これを2の補数として解釈し、-1 と出力されています。 2の補数については、計算機アーキテクチャーの授業できちんと勉強してください。

また、符号付き整数と符号なし整数では、あとで勉強するシフト演算の振る舞いが異なります。

演習1

プログラム1を作成し、実行結果を確認せよ。

列挙型

int型の値で、かつ、取りうる値が決まっているとき、列挙型とすることによって、変数の値を制限することができます。

列挙型は、次のように宣言します。

  printf("%d\n", 10);
  printf("%d\n", 010);
  printf("%d\n", 0x10);
  printf("%04x\n", 16);

列挙子には、先頭から順に 0, 1, 2 と値が割り当てられますが、代入演算子 = をつけて値を指定することもできます。 また、同じ値を複数の列挙子に割り当てることもできます。

次のプログラムは、enum deptという名前の列挙型を宣言し、変数 d をenum dept型として宣言しています(プログラム2)。 こうすることによって、変数 d にはenum dept型の列挙子の並びに宣言された値しか代入できなくなります。

luna% a.out
10
8
16
0010

これを実行すると、次のようになります。

  printf("%f\n", 1.01);
  printf("%f\n", 1.01e2);
  printf("%f\n", 1.01e-2);
  printf("%f\n", 0x1.01p12);

演習2

プログラム2を作成し、実行結果を確認せよ。

定数

変数がプログラム実行中に変化する可能性がある数であるのに対し、定数はプログラム実行中に変化することがありません。プログラムの中に直接書かれている値も、定数です。

10進数

8進数

16進数

文字

値を変更できない変数

変数の有効範囲(スコープ)

ブロック有効範囲

ファイル有効範囲

変数の有効期限

静的記憶域期間

自動記憶域期間

C言語の世界標準規格(おまけ)

C言語は、1989年に最初の世界標準規格が作られました。 この規格は、C89と呼ばれています。

その後、1999年と2011年に規格が改定され、それぞれ、C99C11と呼ばれています。 (現在のgccには、C99とC11のほとんどの機能が実装されています。)

C言語の教科書、参考書を読むときには、どの規格に基づいているのか、確認しておきましょう。

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS