いろんな型々の紹介
今回は前回より短いコードですが頭に入れておいたほうがいい「型」について書きます。
--------
#include <stdio.h>
int main(int argc,char *argv[]){
printf("char=%ld:short=%ld:int=%ld:long=%ld:long long=%ld\n",
sizeof(char),sizeof(short),
sizeof(int),sizeof(long),sizeof(long long));
printf("float=%ld:double=%ld\n",sizeof(float),sizeof(double));
return 0;
}
--------
たったこれだけのコードですが、実は環境によって表示が変わります。
一般的なamd64という種類のCPUを使っている場合の実行はこうなります。
--------
char=1:short=2:int=4:long=8:long long=8
float=4:double=8
--------
では一つずつの「型」について説明します。
まず「char」これはcharacterの略で「文字」型です。
日本語等のマルチバイト文字はこの型には入らないのに注意してください。
アルファベット系の一文字が入れられる方でsizeofというルーチンで大きさを求めると「1」となっています、単位はバイトです。
1バイトの範囲に0~255が入ります、符号ありの場合この前後半分になりますが簡単のため符号なしと考えます。
もちろん漢字は256種類以上あるのでこの「文字」型には入りません、Java等では入るように2バイトに拡張されていたりするのですがCでは1バイトです。
shortは2バイトで表示されました短整数型ですねintとlongとlong longも整数型の派生なのでまとめて紹介すると数が大きくなるほど入れられる数が増えていきます、単位はバイトです。
実はCではこれらの方は実装依存であり実行結果の順に大きくなっていくことは保証されていますが、それが何バイトであるかは言語実装者に委ねられています。
実際32ビットのX86というCPU環境ではlongが4バイトになったりします。
整数型は簡単ですね、人間が扱いやすい数が入ります。
floatとdoubleは浮動小数点型です。
浮動小数点ということで少数以下の計算に使われます。
一部言語ではrealという名前がついていてさも「実数」であるかのように紹介されることもありますが、
----
「コンピュータに実数は扱えません」
----
大事なので強調しました。
実数は無限に存在する数で、無限はコンピュータで扱うには無限のリソースが必要で宇宙全体を記憶媒体にして存在する星をすべて今のコンピュータの100000倍のプロセッサに置き換えても到底足りません。
実数というのは「概念」であり存在はしますが扱うのは非常に難しい数なんですね。
floatで4バイト、doubleで8バイトを使っていてそれなりに制度の高い少数を扱えます。
これについて注意が必要なのは「丸め誤差」です。
小数点以下で表しきれなかった数が切り捨てられてだんだんと誤差が増えていきます。
誤差はあるものとして計算を行うように注意してくださいね。
以上、簡単なCの型解説でした!