Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 有人能解释一下这个代码的作用吗?_C - Fatal编程技术网

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
循环将继续。每次迭代后,它将增加1
signed char
保存从-128到127的值。 如果127增加,则会出现C标准中规定的未定义行为。所以你永远不应该这样做,除非你只是玩玩。可能合理发生的事情包括:

  • 环绕到-128
  • 无限循环,因为编译器认为回绕不可能发生,所以他假定
    c>0
    始终为真
可能还有其他事情(未定义),但在您的情况下,会发生环绕,并且
c
为-128


如果将关系更改为
c,则代码具有未定义的行为。请考虑
字符的大小,并考虑符号位。不可能可靠地回答“为什么?”。理论上,你可能会最终,啊,我明白了,我没想过,谢谢你,这可以解决很多问题。答案确实说明了这一点,但让我再次说明:不要依赖这种行为。