#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)
有人可以解释一下问题是什么吗?
char在您的情况下,它是一个 8 位有符号数,它只能保存值 -128 到 127。当您将 500 和 1000 分配给 a 时char,它会抛出这些值的低八位以外的所有值。500 - 512 == -12、1000 - 1024 == -24。
(C 标准允许char使用 8 位无符号数,在这种情况下您会看到 244 和 232。)