C言語のデータ型の基本
(準備中)
C言語の基本的なデータ型
char 文字 1Byte
short 整数 2Byte
int 整数 コンパイラにより異なる。 2 or 4Byte
long 倍長整数 4Byte
float 実数 4Byte
double 倍長実数 8Byte
C言語の文字列の扱いはやや注意を要します。
Cには文字型(char)はあるけど、文字列型というのはないんですね。
なので、文字列はchar型の変数の配列を使って、
char name[20];
のようにします。
文字列の表し方については画面に出力(printf) /キーボードから入力(scanf)/変数に少し書いてます。
その他、文字型については、文字型のおさらい
変数の型と標準出力への表示(出力)時の注意点はPrintfと変数の型
などご参照下さい。
整数型、実数型については、
各種データ型が混在した場合の演算にける精度の問題や、他のデータ型への変換(キャスト)の
問題については、cast演算子とオートキャストをご参照下さい。
sizeof演算子で各種データ型のサイズをチェックしてみます。
int型はコンパイラによりサイズが異なることがわかります。
sizeof.c
#include <stdio.h>
int main(void) {
printf("char: %d\n", sizeof(char));
printf("int: %d\n", sizeof(int));
printf("short: %d\n", sizeof(short));
printf("long: %d\n", sizeof(long));
printf("float: %d\n", sizeof(float));
printf("double: %d\n", sizeof(double));
printf("long double: %d\n", sizeof(long double));
return 0; }
LSIC86でコンパイル
D:\c>sizeof
char: 1
int: 2
short: 2
long: 4
float: 4
double: 8
long double: 10
D:\c>
Borland C++でコンパイル
c:\bcc55\Bin>sizeof
char: 1
int: 4
short: 2
long: 4
float: 4
double: 8
long double: 10
c:\bcc55\Bin>
(参考)
LSIC86のマニュアルから抜粋
基本型の内部表現は次の表のとおりです。
型 ビット数
char, signed char, unsigned char 8
short, unsigned short 16
int, unsigned int 16
long, unsigned long 32
float 32 (= 1+8+23)
double 64 (= 1+11+52)
long double 80 (= 1+15+64)
near-pointer 16
far-pointer 32
どのデータ型もすべて 2進表現であり、最も低位のバイトが最も小さいアドレス
に配置されます(little endian)。 アドレスの境界合わせは一切おこなわれませ
ん。charは、標準ではunsigned charと同じ型ですが、コンパイラの-csオプショ
ンによってsigned charとすることもできます。符号付きの整数型は負の数を2の
補数で表しています。
浮動小数点型は、 上位から順に符号ビット、指数部、仮数部の3つのフィールド
から構成され、その各ビット数は、上の表中にしるされているとおりです。符号
ビットはどの型も1ビットで、0のときは正、1のときは負を表します。 指数部は
げたをはいており (biased)、0111...111というビットパターンが指数部0を意味
します。仮数部は、float型とdouble型では、先頭の1を省いたケチ表現で、小数
点は一番左にあるものとみなされます。long double型では、先頭の1は省略され
ず、小数点はbit63とbit62の間にあるものとみなされます。
以下に、いくつかの浮動小数点数について各型での内部表現を 16 進数で示しま
す。
float double long double
0 00000000 0000000000000000 00000000000000000000
1 3F800000 3FF0000000000000 3FFF8000000000000000
3 40400000 4008000000000000 4000C000000000000000
-3 C0400000 C008000000000000 C000C000000000000000
0.25 3E800000 3FD0000000000000 3FFD8000000000000000