第2回 4.キャスト

さて、変数に変数を代入できることは説明しました。
では、異なる型同士で代入をする事はできるでしょうか?
一応、できます。
一応というのは、変数の型にはそれぞれ範囲が決まっています。
範囲の大きな変数へ、範囲の小さい変数、例えばint型にbyte型を代入することは特に問
題はありません。
ですが、逆、byte型にintがを代入するのは不可能です。
200ml入るコップに、1Lの牛乳を注ぐとあふれてしまうのと一緒ですね。
変数の範囲以上の値を代入してしまうことを桁あふれ、といいます。
ありがたいことにコンパイラは危険だよ、とコンパイルエラーという形でプログラマに
教えてくれます。
ですが、どうしても異なる型同士の代入というものをしたくなる、或いはしなければな
らない状況というのが出てくる可能性があります。
そのような時は強制的に変換して代入します。
この強制変換を、キャスト、と呼びます。
キャストするには値の前に変数型名を括弧で囲んだものを代入します。
int i = 257;
byte b;
b = (byte)i;

この例ではint型aをbyte型に無理矢理変換し、bに代入しています。
が、当然のことながら、無理矢理変換した際に値があふれると、データが欠落します。
この例では1がbに代入されます。
なぜかというと、257は16進数にすると0x101。
byte型は8Bit。
なので、iの下位8Bitが、bへ代入されることになります。
つまり、0x01。1、です。

double d = 3.14;
int i;
i = (int)d;

とすると、iには3が代入されます。
まるでゆとり教育のようですね。
小数→整数とすると、小数部が切り捨てられます。

2つの例のように、キャストを行うと、データの欠落が起きる可能性があります。
使う場合は良く考えて使ってください。
コンパイルエラーを取る為に、何も考えずにキャストを行うと、後で痛い目を見ること
になります。
まぁ……痛い目を見るのも経験のうちとも言えるんですが、「愚者は経験から学ぶが、
我輩は歴史から学ぶ」という有名な(?)言葉もあるとおり、こういうことは念頭に入
れておくにこしたことはありません。
最終更新:2007年09月06日 12:53
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。