たとえば、2 つの int を除算して float を返したい場合、迷信的に次のように記述します。
int a = 2, b = 3;
float c = (float)a / (float)b;
a
andを float にキャストしないとb
、整数除算が行われて int が返されます。
同様に、符号付き 8 ビット数を符号なし 8 ビット数で乗算する場合は、オーバーフローを恐れて乗算する前に符号付き 16 ビット数にキャストします。
u8 a = 255;
s8 b = -127;
s16 = (s16)a * (s16)b;
まったくキャストしない場合、または変数の 1 つだけをキャストする場合、コンパイラはこれらの状況でどのように正確に動作しますか? すべての変数を明示的にキャストする必要がありますか、それとも左側の変数または右側の変数だけですか?