次のステートメントが機能する理由を理解しようとしています。
putchar( 1 + '0' );
+ '0' 式は、リテラルをそれぞれの ASCII バージョン (この特定のケースでは 49) に変換し、putchar が与えたいと考えているようです。
私の質問は、なぜこれを行うのですか? どんな助けでも大歓迎です。また、間違った推測がありましたら申し訳ありません。
これは ASCII とは関係ありません。誰もASCIIについて言及していません。
このコードが想定しているのは、システムの文字エンコーディングでは、すべての数字が から'0'までの連続した範囲として表示されるため、文字 に'9'オフセットを追加する'0'と、対応する数字の文字が得られるということです。
C または C++ コンパイラで使用される可能性のあるすべての文字エンコーディングには、このプロパティが必要です (たとえば、C++ の 2.3/3)。したがって、このコードは移植可能です。
文字'0'to'9'は連続しています。C 標準はこれを保証します。
アスキーで:
'0'= 48'1'= 49'2'= 50等
は'0'単にオフセットと見なされます。
'0' + 0 = 48、つまりです'0'。'0' + 1 = 49、つまりです'1'。等