有人可以解释这段代码的作用吗?

时间:2016-10-19 10:56:19

标签: c

我试图找出这段代码但没有运气。我需要一些解释

signed char c = '0';
for(; c > 0; c++);
printf("%d", c);

输出为-128,当我将符号更改为"少于"输出是48,为什么?

1 个答案:

答案 0 :(得分:4)

如果您参考ASCII字符编码, 您可以看到字符'0'的数值为48

for循环将继续c为正。每次迭代后,它将增加1. signed char保持-128到127之间的值。 如果127增加,则会得到C标准中所述的未定义行为。所以你永远不应该做,除非你只是玩。可能合理发生的事情是:

  • 环绕到-128
  • 一个无限循环,因为编译器认为环绕不会发生所以他认为c>0总是正确的。

可能还有其他内容(未定义),但在您的情况下会发生环绕并且c是-128。

如果您将关系更改为c<0,则条件为false,并且将跳过循环,并为您提供48作为答案。