次のステートメントが機能する理由を理解しようとしています。
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'
。等