でのputcharの等価ASCIIに進リテラルの変換:49(+「0」式は、それぞれのASCIIバージョンにリテラルを変換しているようです私は次の文が動作する理由を理解しようとしていますC
putchar(1 + '0');
この特別なケースではputcharは与えられるのが好きです)。
私の質問はなぜこれを行うのですか?どんな助けもありがとうございます。間違った前提を犯したことを謝罪します。
でのputcharの等価ASCIIに進リテラルの変換:49(+「0」式は、それぞれのASCIIバージョンにリテラルを変換しているようです私は次の文が動作する理由を理解しようとしていますC
putchar(1 + '0');
この特別なケースではputcharは与えられるのが好きです)。
私の質問はなぜこれを行うのですか?どんな助けもありがとうございます。間違った前提を犯したことを謝罪します。
これはASCIIとは関係ありません。誰もASCIIについて言及しませんでした。何このコードは想定しないことは、システムの文字のすべての数字をコードしているということです
は'0'
から'9'
の連続した範囲として表示され、あなたが文字'0'
にオフセットを追加した場合ので、あなたは、対応する数字の文字を取得します。
CまたはC++コンパイラによって使用される可能性があるすべての文字エンコーディングは、このプロパティ(たとえば、C++では2.3/3)を持つ必要があります。したがって、このコードは移植性があります。
文字'0'
〜'9'
が連続しています。 Cの標準はこれを保証しています。 ASCIIで
:
'0'
= 48'1'
= 49'2'
等
'0'
は単にオフセットと見られています。
'0' + 0 = 48
であり、'0'
である。'0' + 1 = 49
'1'
である。など
私は私はそれについて考えるために停止していないと思います。私はキャラクターを加えることがオフセットを処理するとは思わなかった。ありがとうございました。 – Hank
@ハンク(Hank):文字は整数値なので、整数のように算術的に使用できます。 ( 'fgetc'のようなものは、あなたが求めたのはすべて' char'だったとしても、より一般的な 'int'を返すことを望みます。)逆はあなた自身の' atoi'を書くのに使うことができます:数値数字の 'c'の値は' c - '0''です... –