私が次のことをした場合:
int c0 = CHAR_MAX; //8 bit
int c1 = CHAR_MAX; //8-bit
int i = c0*c1; //store in 32-bit variable
printf("%d\n", i); //prints 16129
8 ビットの数値を掛け合わせて 32 ビットの出力を生成することに問題がないことがわかります。
しかし、もしそうなら
int i0 = INT_MAX; //32-bit
int i1 = INT_MAX; //32 bit variable
long long int ll = i0*i1; //store in 64-bit variable
printf("%lld\n", ll); //prints 1..overflow!!
この場合、2 つの 32 ビット変数が乗算されてオーバーフローし、64 ビット変数に代入されました。
では、int を乗算するときにこのオーバーフローが発生し、char を乗算しないのはなぜでしょうか? 私のマシンのデフォルトのワードサイズに依存していますか? (32ビット)