2

次のステートメントが機能する理由を理解しようとしています。

putchar( 1 + '0' );

+ '0' 式は、リテラルをそれぞれの ASCII バージョン (この特定のケースでは 49) に変換し、putchar が与えたいと考えているようです。

私の質問は、なぜこれを行うのですか? どんな助けでも大歓迎です。また、間違った推測がありましたら申し訳ありません。

4

2 に答える 2

2

これは ASCII とは関係ありません。誰もASCIIについて言及していません。

このコードが想定しているのは、システムの文字エンコーディングでは、すべての数字が から'0'までの連続した範囲として表示されるため、文字 に'9'オフセットを追加する'0'と、対応する数字の文字が得られるということです。

C または C++ コンパイラで使用される可能性のあるすべての文字エンコーディングには、このプロパティが必要です (たとえば、C++ の 2.3/3)。したがって、このコードは移植可能です。

于 2012-01-22T06:06:24.177 に答える
0

文字'0'to'9'は連続しています。C 標準はこれを保証します。

アスキーで:

  • '0'= 48
  • '1'= 49
  • '2'= 50

'0'単にオフセットと見なされます。

  • '0' + 0 = 48、つまりです'0'
  • '0' + 1 = 49、つまりです'1'

于 2012-01-22T06:07:51.047 に答える