首先明确一下,字符类型char(string类读入str[i]为int类型情况和char类型一样,大家可以去测试一下)在C++中为1字节,可以表示的整数范围为0~127,而每一个整数就代表一个字符的ascii码(键盘上所有能按出来的字符都不会超过这个范围)。所以当你读入这个范围内数字参与运算,信息不会丢失,1个字节足够存下来了,直接输出是作为ascii码值对应的字符,显然是乱码。但如果参与运算,虽然类型是char类型,但存的是二进制可不会管你这么多,就作为正常的数字参与运算,能得到想要的结果。但还是那句话,不在0~127的范围内就会丢失信息,算出来的啥也不是。
#include<iostream>
using namespace std;
int main()
{
char a,b;
a=7;//将一个整形数据赋值给char类型
b=127;//这里没有超出一字节的范围
cout<<a*2<<endl;
cout<<a*b<<endl;
return 0;
}
结果为:
14
889
类型级别: char < short < int < long
有符号整型类型同类型运算中: 比int低级的类型,都会转换成int,比int高级的类型不变。
(所以说其中也许还会涉及到一些类型转换的问题,比如char类型在运算过程中向int类型转换啥的,我没深究,感兴趣的小伙伴可以测试一下)
你以为到这里就结束啦?漏漏漏!
#include<iostream>
using namespace std;
int main()
{
char a,b;
cin>>a>>b;
cout<<a*2<<endl;
cout<<a*b<<endl;
return 0;
}
4 5//这里是输入,4—码值为52,5码值为53
104
2756
也就是说,如果你定义的是char类型,然后再cin读入,会默认为对应变量的类型,也就是说你读入4,它会被当作字符‘4’,存入的是‘4’的ascii码值,也就是数值52。参与运算的自然也是它存入的二进制即52.
总结一下:
- 直接将整型赋值给字符型,如果一个字节能存下(0~127),那么就可以直接用它参与正常的数值运算,结果不会错。否则可能因为信息丢失得到错误的值。
- 如果是通过cin读入,由于变量为字符型,所以读入的数据会被默认为字符型,那你存的就是它的ascii码值了,参与运算的也是它的码值。
666