C 有人能解释一下这个代码的作用吗?
我想弄清楚这是什么代码,但运气不好。我需要一些解释C 有人能解释一下这个代码的作用吗?,c,C,我想弄清楚这是什么代码,但运气不好。我需要一些解释 signed char c = '0'; for(; c > 0; c++); printf("%d", c); 输出为-128,当我将符号更改为“小于”时,输出为48,为什么?如果您指的是字符编码, 您可以看到字符'0'具有数值48 只要c为正,则for循环将继续。每次迭代后,它将增加1signed char保存从-128到127的值。 如果127增加,则会出现C标准中规定的未定义行为。所以你永远不应该这样做,除非你只是玩玩。可能合理
signed char c = '0';
for(; c > 0; c++);
printf("%d", c);
输出为-128,当我将符号更改为“小于”时,输出为48,为什么?如果您指的是字符编码,
您可以看到字符'0'
具有数值48
只要c
为正,则for
循环将继续。每次迭代后,它将增加1signed char
保存从-128到127的值。
如果127增加,则会出现C标准中规定的未定义行为。所以你永远不应该这样做,除非你只是玩玩。可能合理发生的事情包括:
- 环绕到-128
- 无限循环,因为编译器认为回绕不可能发生,所以他假定
始终为真c>0
c
为-128
如果将关系更改为
c,则代码具有未定义的行为。请考虑字符的大小,并考虑符号位。不可能可靠地回答“为什么?”。理论上,你可能会最终,啊,我明白了,我没想过,谢谢你,这可以解决很多问题。答案确实说明了这一点,但让我再次说明:不要依赖这种行为。