为什么是这个结果??

来源:百度知道 编辑:UC知道 时间:2024/06/01 04:46:39
#include "stdio.h"
main()
{
char a='2',b='a';
int c;
c=a+b;
a=c;
printf("%d,%d,%d",a,b,c);
}

输出 -109,97,147

b=97我明白,其他两个我不明白

'2'的ASCII值是50,可以解释c=97+50=147
因为a是char类型,一个字节,是有符号的字符型,所以最大能表示127,因为最高位是符号位,所以以整形输出的话就是负数了,而且a是通过补码运算出来的结果

因为字符a的ASIIC码为50,b为97,
所以c=a+b即为147,因此第三个输出为147。
a=c;
这个赋值语句有问题,因为int为2字节,而char为1字节,因此赋值后a为147(十六进制为0x93),可是这是存在一个字节里面的,输出操作要求是一个整数类型int,因此输出时高位字节全都置1.
结果就变成了十六进制0xFF93,而这样的话就会是一个十进制负数-109。因此会输出-109。
不知我说的清楚不。