字符型数据之间相减会有数据类型转换吗

#include<iostream>
#include<ctime>
#include<iomanip>
using namespace std;
int main()
{
    cout << ('9' - '3') << endl;
    cout << sizeof('9' - '3');
}

运行结果为6   4 
为什么

```

  1. 这不是类型转换导致的,你得先理解sizeof函数的意义,他是求变量所占空间大小
  2. 9 和 3在你没有特别定义的情况下,编译器会认定它两为int类型,那么sizeof('9' - '3')的意义就是求 9-3这个表达式的结果的所占空间大小,即一个int类型所占空间大小,就是4,long类型为8
  3. 你可以尝试先定义好类型,再输出sizeof就会得到不一样的结果

字符的算术运算,实际上是字符的ASCII代码运算。'9' - '3'就是算ascll的差值
6是一个整数,所以sizeof('9' - '3')相当于sizeof(int) 输出4

C和C++的字符的存储实际上储存的是它的ascii码,也就是一个 1Bytes 的无符号整型数字,所以在执行字符的加减法的时候就是数字之间的加减,不会有类型转换;而在输出字符的时候,因为使用了%c或%s进行输出,所以程序会查表找到某个ascii码对应的字符再输出,所以用%c或%s输出可以看到字符,但实际存储的是一个数字,所以它也可以不需转换类型就用%d输出或者参与含有数字的运算。