C++ 字符串string中的数值运算剖析

在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’
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值