2 xiaodaxun xiaodaxun 于 2013.12.18 14:13 提问

java字符转换成数字问题?不懂什么意思c='6';int a = c-'0';

字符转换成数字问题?不懂什么意思
c='6';
int a = c-'0';

那个-‘0’表示什么意思呢??百度了下好像是什么js的弱类型转换?帮忙解释下谢谢了

5个回答

u013218470
u013218470   2013.12.19 21:00

int char 之间是可以互相转换的 '0' 的ASCII码值对应的是48 '1' 的ASCII码值对应的是49
····

依次往下 这就是规律

如果你想将一个 字符类型的数字 转化为int 类型 用这个字符减去 '0' 在附给int就行了

如:
char c='8' ;
int i= '8'-'0';
那么i的值一定是 数字8

franzhong
franzhong   2013.12.18 15:56

c的类型很关键你却没给出来!
先说int型,可以把你那个代码转换一下

int c='6';
int x='0';
int a=c-x;
//System.out.println("c:"+c);//54
//System.out.println("x:"+x);//48
//System.out.println("a:"+a);//6

单引号特殊是char型,把他赋给int型会赋对应的ASIC码值//改为双引号会报错,类型不配
这基本是语言共性了,追根会追到C语言或汇编上去
比如'a'是97也可以这样做 int c='a';而不报错,这在底层场合很有用,可能就是你说的弱类型转换,严格的讲,类型确实不同,因为'a'有char去盛放,但这样设计用处还很大,又能体现一点点智能纠错的感觉,这是发生在弱类型诞生之前的事
有的甚至可以这样int m="123";//这就是弱类型范例,当然js一个var就通用了,php一个$
再说就是c是char型,那么输出c就是a
但是这个+-*/运算符还是会对两边进行自动转换
所以a的值还是不变,对数据的运算确认类型确实是首要任务,处理的很正确,在别的语言中,可以重载运算符,设计为需要模式
更深的你再追追吧,可能到汇编word甚至硬件上去

easylogin
easylogin   2013.12.18 16:51

c='6';
int a = c-'0';

这里的c是一个变量,c='6'就是讲6的ASCII码值54(去查下ASCII码表就知道了)赋给变量c,其在内存中存储的是对应的码值54而不是6,int a = c-'0',定义了一个a变量,并给它赋值,赋值的数值是c-'0'表达式的结果,c变量是6的ASCII码值54,减去0的ASCII码值48,结果是给a赋值6,此时a变量的在内存中存储的就是数值6了。所以你可以把它理解为由字符型的'6'变成了数值型的6,进行了类型转换。

u011967984
u011967984   2013.12.18 17:02

应该是字符‘6’-字符‘0’得出的字符再转换为 int 型

Briantmac
Briantmac   2014.09.25 10:42

char类型的变量都是存AscII码的,两个AscII码相减再转int就容易理解了吧

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!