问题描述
- java字符转换成数字问题?不懂什么意思c='6';int a = c-'0';
-
字符转换成数字问题?不懂什么意思
c='6';
int a = c-'0';那个-‘0’表示什么意思呢??百度了下好像是什么js的弱类型转换?帮忙解释下谢谢了
解决方案
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甚至硬件上去
解决方案二:
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,进行了类型转换。
解决方案三:
int char 之间是可以互相转换的 '0' 的ASCII码值对应的是48 '1' 的ASCII码值对应的是49
····
依次往下 这就是规律
如果你想将一个 字符类型的数字 转化为int 类型 用这个字符减去 '0' 在附给int就行了
如:
char c='8' ;
int i= '8'-'0';
那么i的值一定是 数字8
解决方案四:
应该是字符‘6’-字符‘0’得出的字符再转换为 int 型
解决方案五:
char类型的变量都是存AscII码的,两个AscII码相减再转int就容易理解了吧