鱼C论坛

 找回密码
 立即注册
查看: 2918|回复: 5

c语言字符操作 求解释

[复制链接]
发表于 2012-3-22 12:11:07 | 显示全部楼层 |阅读模式
1鱼币
char a;
int m;
a='9';
m=a-'0';


m为什么能够转化成整形······

最佳答案

查看完整内容

本质原因是:ascii码表中,字符'0','1','2'...'9'是按从小到大的顺序连续存放的. 所以假设字符'0'的ascii值为x, 字符'1'的ascii值为x+1,所以'1'-'0'就是1 字符'2'的ascii值为x+2,所以'2'-'0'就是2 字符'3'的ascii值为x+3,所以'3'-'0'就是3 ... 字符'9'的ascii值为x+9,所以'9'-'0'就是9
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-3-22 12:11:08 | 显示全部楼层
本帖最后由 仰望天上的光 于 2012-3-22 13:58 编辑

本质原因是:ascii码表中,字符'0','1','2'...'9'是按从小到大的顺序连续存放的.
所以假设字符'0'的ascii值为x,
字符'1'的ascii值为x+1,所以'1'-'0'就是1
字符'2'的ascii值为x+2,所以'2'-'0'就是2
字符'3'的ascii值为x+3,所以'3'-'0'就是3
...
字符'9'的ascii值为x+9,所以'9'-'0'就是9
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-22 12:34:43 | 显示全部楼层
字符形式的数据
在内存中是以无符号整数(处于0x00-ox7f的数)的形式存在的
你也可以用printf("%c",88); 将整数以字符的形式输出
这是C语言默认的一个约定,像Java,C++和C#都是这样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-22 13:36:05 | 显示全部楼层
你不是自己定义m为int类型了嘛!而且char转化int是自动转化的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-22 14:13:02 | 显示全部楼层
每个字符都对应相应的ascii碼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-3-22 16:00:35 | 显示全部楼层
因为字符变量“a”和字符常量'0'在内存中是以ASCii码存放的,‘9’和‘0’的ASCii码分别是57和48;
所以(m=a-'0')等价于(m=57-48),结果本来就是整型的,不存在类型转换的问题。
需要注意的是,C语言规定赋值语句中右边的数据类型会被自动转换为左边的类型;但是这里左右都是整型,所以没有转换。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-27 00:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表