根据C ++转换规则,例如,如果将一个int乘以double,则首先将两个都转换为double,然后再进行乘法。
int a = 5;
double b = 0.5;
cout<< a * b; // 2.5
另一方面,将一个int乘以一个int不需要转换,并且乘法可以立即完成,从而得到一个int。
int a = 5;
int b = 5;
cout<< a * b; //25
应用这些规则,我认为将char乘以char不需要转换,并且相乘将导致char(1字节)。 因此,以下样本的结果将溢出
char a = 'a'; // 97
char b = 'b'; // 98
cout<< a * b; // 9506 - Doesn't overflow!
但是,事实并非如此!
将两个字符相乘有什么特别之处吗?。
答案 0 :(得分:1)
一个char组成的char不需要强制转换,相乘将得到一个char(1字节)。
否, char 自动升级为 int 或 unsigned int
如此
char a = 'a'; // 97 char b = 'b'; // 98 cout<< a * b; // 9506 - Doesn't overflow!
没有溢出,而 int 至少由14个位,97和98提升为 int 中的 char ,无论事实如何 char 的签名是否为7位以上。因此,您计算出97*98
为9506