字符储存再以%d输出,数值和ASCII码对不上

图片说明
输入的是字符小写a,存储的值缺为-13215,不应当是97吗?
-13215在计算机中存储为11001100 01100001
97为1100001

没毛病,%c只用了一个字节,也就是01100001,后面那个是随机值。
纠正你下,-13215在计算机中存储为11001100 01100001,这个在big endian计算机上才是这样,咱们的PC是little endian的,存储字节顺序是低位在前,因此是
01100001 11001100

1字节占八位,所以存储八位

答:short数据占用2个字节,而char字符占用1字节,读入字符'a'的时候只覆盖了u变量的低位1字节,高位字节仍然是有数据的为11001100,所以最终显示不一样。

方法1:初始化的时候给u赋初值0,这样高位数据为0就不会影响输出结果.

#include <stdio.h>
int main()
{
    short u=0;
    printf("short占用字节数为: %d Byte\n", sizeof(short));
    printf("请输入一个字符:");
    scanf("%c", &u);
    printf("\n您输入的字符为:%c\n", u);
    printf("该字符对应的ASCII码为:%d\n", u);
    return 0;
}

方法2:直接将u定义为char型数据

#include <stdio.h>
int main()
{
    char u;
//  printf("short占用字节数为: %d Byte\n", sizeof(short));
    printf("请输入一个字符:");
    scanf("%c", &u);
    printf("\n您输入的字符为:%c\n", u);
    printf("该字符对应的ASCII码为:%d\n", u);
    return 0;
}