c语言 这题里面常量赋值给变量 没搞懂为什么不可以 详细解释一下 求教 回答满意 一定增加悬赏

如题所述

严格说,应当先A。原因是'\82'是通过转义字符\,用八进制或16进制表示的ASCII码,但八进制的符号不能有8,所以非法;而十六进制的话'\82'表示十进制130,赋给char型的a超限了(-128~+127)。但是C编译器在遇到这种情况后,在提示警告的同时会截断把最低位的‘2’赋给a。追问

哦哦 再问一下 八进制 不是要再前面 加上0吗?我没学过c语言 现在刚开始看 弱弱问一下 我如果有问题 想请教您 怎么联系你啊 放心 肯定有报酬的 你想要什么 尽管开口 没关系的

追答

早先的编译器,要求'\DDD'中要写满3位,八进制写‘\DDD',十六进制写'\xDDD'。后来的编译器是先按八进制解释而无论多少位,也无论紧接着\后是否有0;解释不了的就从最低位截取一个字符,如'\82'按八进制解释不了,就截取‘2’赋给等号左边的变量。对十六进制则要求\后有x或X,不能解释时就报错停止编译。这可能还与编译器有关,不同的编译器可能有所不同,没有研究过。

追问

一些问题 发您私信了 麻烦你看一下 谢了

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-03-10
'\82' 这个转义字符有问题
以 \ 开头 后面跟 数字的 为 8进制数
以 \ 开头 后面跟x 字母则是 16进制数
而 8 进数中 以 8 进位 所以 8进制数的表示方法 是\0~7 也就是 \ 后边只能是 0 1 2 3 4 5 6 7 这几个数
'\82' 显然是一个 8 进制数的表示方法 但是 8 进位数不可能出现 8 所以不合法
第2个回答  2015-03-11
单引号括起的是字符常量。'\82' 是不合法的8进制字符,8 超界了。如果是 '\72' 便是合法的8进制字符。
char a='\82'; 声明 a 是 char 型变量,初始化 为 '\82'; 仅管 '\82' 是不合法的8进制字符,但编译器会处理成:
char a='2'; // 变量 a 包含1个字符
printf("%c\n",a); 输出 2
同时有警告 '8' : unrecognized character escape sequence
-------
所以,答案理应是 B) 变量 a 包含1个字符
第3个回答  2015-03-10
\转义字符来使用ascii码来表示单字符,反斜杠后面必须接十六进制或者八进制

即\0和\0x开头
第4个回答  2017-09-21
字符占一个字节,‘\82’不是八进制,当属于字符串,舍弃剩最后低位
相似回答