2016-03-19 17 views
-2

私は最終的にK & Rを読み始めました、と私はちょうどアレイ部分に到着しました。 しかし、このセクションの例では、完全に理解していないコードがありますので、Cのすべての概念を理解したいと思っていますので、明確な説明をお願いしたいと思います。 C++の早期学習の基本です。明確な説明[C - 「0」]

私は既にJAVAの知識がありますが、これがあなたの説明のセットアップに役立つことを願っています。

質問:

コードndigit[c - '0']のこの作品では、私はそれをやろうとしているものを理解していない、私は0がASCIの規格を参照すべきであるとなければならないことを他のスタックOverlfowの質問から知っています48ですが、まだは、どのようなcと0の関係がにあるのか理解していません。

+0

もう少しコンテキストが役立ちます。しかし、あなたが言ったように、 '0'は48で計算は簡単です。文脈がなければ、いかなる関係についても何も言えません。 –

+0

'c'は' char'で、その文字の 'int'値を取得するには、 '0' - '0'は' 0 'で '' - 1 ' - ' 0 ''は '1'であり、以下同様である。 –

+1

ASCI ** I **標準はここでは関係ありません。実際には、このコードはC言語で使用できるすべての文字エンコーディングで動作します。 – Olaf

答えて

0

'0'は、48(ASCIIエンコーディングを想定)と同じです。従って、他の桁はそれぞれ49〜に等しい。そう'1'等、50'2'49と等しいしたがって'1' - '0'1'2' - '0'ように2であり、かつ、'50 - 48'に等しくなる、'49 - 48'に等しいです。すなわち

c - '0'は('5'ため5であろう)、その整数相当する'5'ような数字に変換します。

+2

実際のエンコーディングは無関係です。これはすべての文字セットで動作することが保証されています。 – Olaf

+0

@Olaf私が言ったのは、「「0」は48に等しいということです。確かに、Cの標準では、非ASCIIエンコーディングでも '' 0 '== 48'を保証するものではありません。 – sepp2k

+0

そうですね、Cは文字か何ですか? – FET

1

ccharで、おそらく数字を表します。 Cではcharは整数型なので、算術演算を実行できます。

数字は連続範囲の数字で符号化される。'0'のコードはkある場合、'1'のコードは'2'のコードはそうでk+2であり、かつ、k+1あります。そのため、数字を表す文字から'0'を減算すると、その数字の数値が得られます。

たとえば、'5'-'0'を減算すると、'5'の代わりに数字5が得られます。

ndigit[10]を作成した場合、ndigit[c - '0']を使用すると、その桁に対応する配列要素にアクセスできます。これは、たとえば、入力内の異なる桁の数を数えるために使用できます。