8

我必须分析这些代码片段的输出:

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,以字符的形式返回。

例如, ASCII 字符代码'A'是 65,但为什么第二个函数打印100 -56,而不是100 200

4

2 回答 2

10

在问题中使用的平台上,该类型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
于 2013-04-08T01:51:09.927 回答
9

C 有多种整数类型:(char至少 8 位)、short(至少 16 位)、int(至少 16 位)、long(至少 32 位)。有unsigned各种各样的。如果您为普通类型分配了太大的值,则结果是未定义的(您永远不应该这样做,编译器可能会假设您从不这样做,并且根本不检查)。在这种unsigned情况下,他们“环绕”。但请注意,尺寸不能保证,只是它们的最小尺寸。有些机器都是 32 位宽的。

于 2013-04-08T01:40:25.083 回答