5

char単純な加算と、数値が負になるときのテストによって、 a の最大値を見つけています。

#include<stdio.h>

/*find max value of char by adding*/
int main(){
  char c = 1;

  while(c + 1 > 0)
    ++c;

  printf("Max c = %d\n",(int)c);  /*outputs Max c = -128*/
  return 0;
}

ループはwhile先にテストされるため、最初c+1は負であり、ブレークし、 の値を出力しcます。しかし、プログラミングは負の数を出力しています!

このプログラムが出力しないのはなぜ127ですか?

4

2 に答える 2

5

There is an implicit cast occurring in the while conditional which is causing the comparison to work on ints rather than chars.

If you change it to

while((char)(c + 1) > 0)
    ++c;

then it will print 127.

于 2016-07-25T20:00:25.660 に答える
0

符号付き整数のオーバーフローは未定義の動作です。これは、追加がオーバーフロー「できない」ため、c + 1 > 0適合するC コンパイラが に変更できることを意味します。true

これは、プログラムが合法的に無限ループにコンパイルされる可能性があることを意味します。

于 2016-07-25T20:03:50.957 に答える