c语言编程输出结果的疑问

来源:百度知道 编辑:UC知道 时间:2024/06/04 05:15:16
include<stdio.h>
void main()
{char c;int i;
c=43;i=c;
printf("i=%d\n",i);
c='\376';i=c;
printf("i=%d\n",i);
}

输出结果是 i=35
i=-2
教材结果是 i=43
i=-2
两个结果都不是太理解,请各位高手指教!

我运行过了 。 结果是i=43,i=-2;
定义了C为char 型 c=43,就是把‘+’的ASCII码的值给了C,又把C赋给我i;所以打印第一条语句时 应该输出 i=43;
c='\376' 是把八进制数c='\376'赋给C 而八进制数c='\376'转为十进制数是 254 而你定义的i 为有符号告型 ,你没有用 unsigned int i ;则系统默认为有符号的。在C中int 占两个字节 所以能表示范围是(-128,127); 255是-1;
所以254 转化之后就是-2 ;依次类推 253就是 -3 明白了吧
给我分

结果明明是i=43
i=-2
我验证做了 第一个没什么好说的吧 其实在c语言里可以把char看成小整形 可以进行数值运算 所以c=43;i=c; 两条语句就把43赋给了i 自然打印出43
第二个是转义字符 \ddd可表示任意字符 ddd是三位八进制 表示一个字符\376是-2
再具体点的我就不清楚了

教材出错了!

第一个是43,没有问题.

'\376'是用三位八进制数字表示的转义序列,等于十进制数254,这是在扩展ASCII中的一个符号(不常用),254用八位表示时,符号位为1,所以表示-2

C语言存世了几十年了,比你我的年纪都要长,所以不要动不动就怀疑C,不如多怀疑怀疑自己和所看的教材吧。。

楼上各位有说的正确的,也有欠妥的,我总结一下:

首先,对于第一个结果可以肯定:你的程序和输出结果不符!
(1)如果你程序是对的:
第一个结果就是43,正常的10进制常量43赋值给c,又把c赋值给i,再以10进制形式输出i,也就是输出43了。
(2)如果想得到教材的输出结果,程序应为
c=043;i=c
printf("i=%d\n",i);
这里043表示8进制常量

其次,对于第二个结果,'\376&#