我必须分析这些代码片段的输出:
int x, y;
x = 200; y = 100;
x = x+y; y = x-y; x = x-y;
printf ("%d %d\n", x, y);
char x, y;
x = 200; y = 100;
x = x+y; y = x-y; x = x-y;
printf ("%d %d\n", x, y);
所以,我现在知道int
代表整数,char
代表字符;我已经阅读了差异,如果我放入printf
%d
,它会以数字的形式返回,%c
会以字符的形式返回。
'A'
的ASCII字符代码例如为65,但为什么第二个函数打印100 -56
而不是100 200
?
答案 0 :(得分:8)
C有多种整数类型:char
(至少8位),short
(至少16位),int
(至少16位),{{1 (至少32位)。其中有long
种。如果为普通类型分配的值太大,则结果是未定义的(您永远不应该这样做,编译器可能会假设您从未这样做,而根本不检查)。在unsigned
案例中,他们“环绕”。但请注意,尺寸无法保证,只是它们的最小尺寸。有些机器都是32位宽。
答案 1 :(得分:6)
在问题中使用的平台上,类型char
似乎是1字节(8位)大小,并且是带有1个符号位和7个值位(并使用2的补码算术)的带符号类型。它存储的值从-128到127.因此,x
和y
正在发生这种情况:
x = 200 => x takes value -56
y = 100 => y takes value 100
x = x+y => x takes value 44
y = x-y => y takes value -56
x = x-y => x takes value 100