已知ch是字符型变量,那ch=5+9对不?

那下面那个是错的?ch='5+9'
ch='5'+'9'

本来很明确的问题,不过LS有些回答有误,那么就回答一下好了...
相对而言,ch='5'+'9'是正确的表达式(但是语义基本上无实际意义,如果是-的话表示字符集中两个字符相差的位置)。'5'和'9'都是字符常量,相加的结果也是赋给char类型的变量ch,没有语法上的问题。通常采用的ASCII码C语言实现中,'5'对应值为53,'9'对应值为57,结果ch会被赋值为110对应的char变量,也就是'n'。
至于ch='5+9',语义上无意义(不是表示“一个”字符),语法上也有大问题(就'5+9'的单引号内的字符数而言;事实上这样溢出了一个char的表示范围,导致隐式转换越界的错误),不过编译器不一定会给出编译错误,而可能只给出警告。
原因是,C语言的字符字面量(单引号括起来的部分)是int存储的(C++中是const char),只是明确了“表示一个数”的含义。用单引号括起来的部分超过4个字符(32位)时则会被截断。(用双引号括起来的字符串字面量则会被明确地实现为一段连续的内存空间中的char变量,可以看作char数组。)
LS几个回答的一些错误:
错误1:关于字符字面量的问题,上面有说。
错误2:语言问题和字符集问题混为一谈。
语言和字符集是无关的。ASCII只是C语言实现中支持得比较好的字符集,也和其它MBCS(多字节字符集,例如中文常用的ANSI/GBK)兼容,所以广泛采用。
错误2.5:ASCII是ANSI发布的7位编码,对应有效数值范围一般为0~127,而不是0~255。一些西欧扩展字符集中用区间128~255的一些编码点表示原本不属于ASCII的字符。
错误3:C语言没有内建的byte型数据。
顺便:需要注意,char、signed char、unsigned char也不一定完全相同,和平台相关。
错误4:5+9既然在成对的单引号内,就不会被作为表达式(当然,如果能硬写出不符合这种判断的编译器来的话,可以无视这条)。
To niebo_bar :断言“语法错误”时,需要有根据。或者如 FeVeR银 试验运行结果(虽然运行结果是否“正常”的理解因人而异),否则就是在帮助误导他人。
====
[原创回答团]

参考资料:原创 + Dev-C++确认

温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-06-15
对的, 你要明白ch是字符即一个char

char占用一个 字节,而 byte型数据也是占用一个字节,所以可以运算。
ch='5'+'9'是正确的
ch='5+9' 是错误的,编译无法通过,因为没有这样的字符。 如果要写成字符串的话也应该是双引号"5+9"但ch是字符不是字符串

另外有一个关键的知识点,为什么'5+9'是错的?
因为ch是char类型,只占8位,即一个byte,一个byte可以表示 2的8次方 种情况产生,即可以描述256种情况(0~255)。在计算机中用ASCII码来表示0~255种字符,分别是数字0~9,大写和小写字母a~Z,外加一些特别字符和控制字符,一共是256种。
‘0’~‘9’‘a’~'Z'都是字符,
而"0"(注意是双引号)"abc","5+9"这些都不是字符,而是字符串。
字符串的意思是由多个字符串在一起组成的,你可以理解成一个字符型数据组成的数组。必须由双引号括起来。
第2个回答  2019-05-05
如果说错,只有第一个错了
ch='a+b'这种写法是错误的,a+b是一个字符串,但是却使用单引号,有些编译器应该会报错,不报错的话会将最后一个字符赋值给ch,也就是b
ch='\0'这是对的,\0是c中字符串的结束符,是一个空字符,其ascii码为0x00
ch='7'+'9'也是对的,运算方式为将7的ascii码和9的ascii码相加,得到的ascii码对应的字符赋给ch,7的ascii码为55,9的ascii码为57,和为112,对应的字符为p,所以ch='p'
ch=5+9也是对的,是直接将ascii码为14的字符赋值给ch,但是这个字符是控制字符,打印在控制台是一个音乐符号
第3个回答  2010-06-15
嗯,我并不是想要被采纳为最佳答案
我只是纯粹赞同3楼的说法
第一个ch=‘5+9’,并不是一个字符常量
C语言之中有规定
字符常量包括单字符常量和转义字符常量
单字符常量就是‘x’,x可以是数字,字母,以及任何符号
转义字符常量就是‘\n'这一类的,代表换行
根据上述,ch=‘5+9’不是字符常量
而ch='5'+'9'不同,
可以理解为'5'与‘9’这两个字符相+,再赋值给ch

所以第一个错误,第二个正确
第4个回答  2010-06-15
C语言中,字符型变量的存储是以字符的ASCII码形式存储的,举个例子,小写字母'a'的ASCII码为97,所以下面的赋值语句是等价的
ch='a'; <=> ch=97;
所以说,ch=5+9在C语言中是正确的。
补充问题:
ch='5+9'
这个是错误的,而且是语法错误,单引号只能用在字符上,而不能用在字符串上
并且ch是字符型不是字符串型
ch='5'+'9'
这个是正确的,'5'的ASCII码为53,'9'的ASCII码为57,这一句相当于ch=53+57;=>ch=110=>ch='n',ch赋值以小写字母'n'