5-6. キャスト・sizeof
◇キャスト
代入については先週までにいろいろとやってきましたが、代入したいのにデータ型が違ってうまくいかない時、
たとえば、2つの変数の割り算をしてその結果を小数点付で表示するといった場合、演算する2つの変数が両方ともint型であった場合実数としての答えが得られません。
int a=5,b=2;
double r;
r = a / b ; /* 波線の部分は整数値(2)になる */
~~~~~
ここでキャスト演算子を用いてa又はbのどちらかをdouble型と見なせば計算結果は小数点付の実数が得られます。
r = (double)a / b ; /* このようにする(r=2.5) */
r = a / (double)b ; /* こっちでもOK(r=2.5) */
ただし式全体をキャストしても値は変わらないので
r = (double)( a / b ) ; /* 波線部分が整数なので小数点以下は0になる
~~~~~ (r=2.0) */
あと、単純な代入でもチェックの厳しいコンパイラでは型が会わないと警告しますので、使う癖をつけておいたほうが良いかもしれません。
int a=3;
double r;
r = (double)a;
a = (int)r; /* 結果を整数にして代入(小数点以下を切り捨て) */
◇sizeof
これはデータ型のサイズをバイト単位の整数で表す演算子です。
使い方は、
sizeof(…) …の部分にオブジェクトや式またはデータ型を入れます。
int a,b;
sizeof(a); aのサイズ
sizeof(b); bのサイズ
sizeof(a/b); a/bの演算結果のデータサイズ
sizeof(int); int型のサイズ
sizeof(double); double型のサイズ
一度下のプログラムで今使っている開発環境の各データ型のサイズがどのようになっているか確認してみてください。
#include<stdio.h> main() { printf(" int size %d bytes\n",sizeof(int)); printf(" char size %d bytes\n",sizeof(char)); printf(" float size %d bytes\n",sizeof(float)); printf("double size %d bytes\n",sizeof(double)); }
ちなみにLSI-Cではintが2バイト、VC++ではintが4バイトになります。
あと、ビットとバイトの関係は1バイト=8ビットになります。