我试图找出这段代码但没有运气。我需要一些解释
signed char c = '0';
for(; c > 0; c++);
printf("%d", c);
输出为-128,当我将符号更改为"少于"输出是48,为什么?
答案 0 :(得分:4)
如果您参考ASCII字符编码,
您可以看到字符'0'
的数值为48
。
for
循环将继续c
为正。每次迭代后,它将增加1. signed char
保持-128到127之间的值。
如果127增加,则会得到C标准中所述的未定义行为。所以你永远不应该做,除非你只是玩。可能合理发生的事情是:
c>0
总是正确的。可能还有其他内容(未定义),但在您的情况下会发生环绕并且c
是-128。
如果您将关系更改为c<0
,则条件为false
,并且将跳过循环,并为您提供48作为答案。