在C语言中,实际上字符型数据在内存中是以二进制形式存放的,并不是真正的把一个字符存进内存里。在对字符型数据进行相加减运算的时候,系统会首先会将char型数据以隐形的方式转化成int型数据再进行相加减运算的。因此,由字符型数据在内存的存储方式来看,字符型数据是可以进行数值运算的,对字符型数据做数字运算实际上就是对字符本身对应的ASSIC码进行相应的数值运算。
例如:
#include<iostream>
using namespace std;
int main()
{
string s="1234";
printf("%c ", s[1]+s[2]);
printf("%c ", s[1]+s[2]-'0');
printf("%d", s[1]-'0'+s[2]-'0');
printf("%c", s[3]-1);
printf("%c", s[1]+s[2]-1-'0');
printf("%c", s[1]+s[2]-1);
return 0;
}
结果
e 5 5 3 4 d
- 分析:2的ASCII码为50,3的ASCII码为51,d的ASCII码为100,e的ASCII码为101,因此:
- 第一个结果e = ‘2’+‘3’= 50+51 = 101 = ‘e’
- 第二个结果e = ‘2’+‘3’-‘0’ = 50+51-48 = 53 = ‘5’
- 第三个结果e = ‘2’-‘0’+‘3’-‘0’ = 2+3 = 5
- 第四个结果3 = ‘4’-1 = 52-1 = 51 = ‘3’
- 第五个结果4 = ‘2’+‘3’-1-‘0’ = 50+51-1-48 = 52 = ‘4’
- 第六个结果d = ‘2’+‘3’-1 = 50+51-1 = 100 = ‘d’