图一:此图为使用 '/xxx' 方式,int 类型和char 类型的接收结果对比图
图二:此图为上图的16进制整数输出图。
图三:此图为使用 '/' 除号 和 '\' 转义符 赋值的对比图。
如题,在翻阅以前的博客时,发现自己曾偶然发现使用 char ch = '/123' 的方式可以成功将 ch 赋值为3。而后在进过一系列测试发现,实际上从 ‘/0’开始返回的是一个很大的整数,用16进制表示就是 0x2f30。而后逐次往上加。但是这么久以来始终没搞懂原因。
并且,使用 '/xxx' 除号的方式可以与 '\'转义字符+8进制('\xxx')的方式给char型变量赋值有同等的效果。但他们又有不同点,主要区别有下:
使用
'\xxx' 给char型变量赋值,实际上是把8进制转换成10进制,在根据相应的10进制数ascii转换为对应字符。如:ch='\12',此时ch的值为'/n'。换行符(\n)的ascii值为10.
使用
'/xxx' 返回的是一个很大的整数,使用这种方式给char类型赋值,会得到 '/xxx' 中最后一个字符。如: ch='/abc',此时ch的值为字符'c'。
另外,'\xxxxxx' 使用转义字符+8进制的方式,如果超出3为8进制数或前三位中有非8进制数就会停止转换,直接取最后一位元素的值。
如:ch1='\a1'; ch2='\0001'; 这两种方式得到的ch都为ascii值 1。
而 '/xxx' 最多只支持输入3位,并且不论输入什么内容,char类型变量ch都值保留最后一位元素,并且是以字符的形式存储。
网上也没找到啥有用的资料,只能求助bss的大神了。