如果我执行以下操作:
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!!
在这种情况下,两个 32 位变量相乘,溢出,然后分配给 64 位变量。
那么为什么在乘以整数而不是字符时会发生这种溢出呢?它是否取决于我机器的默认字长?(32 位)