C C++ 意外输出

1 c type-conversion

#include <stdio.h>

int main() {
    char Roman[] = "IVXLCDM";
    int Num[] = {1,5,10,50,100,500,1000};
    int n = 0;

    do
    {
        Roman[n]=Num[n] ;
        printf("%i\n", Roman[n]);
        n++;
    } while (n<7);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

对于上面的代码我期望输出:

1
5  
10 
50 
100
500
1000
Run Code Online (Sandbox Code Playgroud)

但它正在产生:

1
5  
10 
50 
100
-12
-24
Run Code Online (Sandbox Code Playgroud)

代码和输出

有人可以解释一下问题是什么吗?

Mar*_*ler 5

char在您的情况下,它是一个 8 位有符号数,它只能保存值 -128 到 127。当您将 500 和 1000 分配给 a 时char,它会抛出这些值的低八位以外的所有值。500 - 512 == -12、1000 - 1024 == -24。

(C 标准允许char使用 8 位无符号数,在这种情况下您会看到 244 和 232。)