質問: a * b; ```
回答: どの言語か分かりませんが、一般論で言うと、`uint8`型の値と`uint`型の値の積は`uint`型になるので、`uint8`型の変数に代入するにはキャスト(ないしそれ相当の型変換)が必要なのでしょう。 コンパイルエラーが出ていると思うので、実行時に値を見て、エラーにするかどうか決めているわけではありません。