2012-04-10 13 views
0

私はC言語を学習する本の「The C Programming Language」を読んでいて、算術s[i] - '0'を見つけました。彼らはs [i]に格納されている文字の数値を返します。私はそれをかなり理解していませんでしたが、それはどのようにして減算によって値を与えることができましたか? メモこれはatoi関数で使用されます。atoi関数は、数字の文字列を数値に変換します。 おかげC文字の値の算術

+1

が重複する可能性あり:http://stackoverflow.com/questions/10023180/how-does-character-representation-in-array -index-work-in-this-case –

+0

あなたのすべてのクイック返信をありがとうございました。 私は今それを理解しています。 他の質問も投稿しました。ありがとう –

答えて

3

基本的に、現代のコンピュータではすべての情報が一連のバイト。 をどのように解釈するかは、各プログラムごとにバイトごとです。だから、文字は1バイト以上のもので、人間が読める文字や記号を表す数値です。たとえば、ASCIIでは、文字 'A'は数値65で表されます。

これは、Cなどの特定のプログラミング言語では、文字を数値として扱うことができるということです。例えば、Cでは式'A' + 1は66を返します。これはBのASCII値です(コンパイラ/プラットフォームがASCII互換の文字セットを使用していると仮定します)。

+2

しかし、 ''A '+ 1 ==' B''というのはCでは保証されていません。これはASCIIでは当てはまりますが、すべての文字セットでは当てはまりません。 – ouah

5

ソースと実行の基本的な文字セットの両方で'9'から'0'の値は

C.

内のすべての文字セットでの連続した値であることが保証されている文字(C99、5.1.2p3)」、上記の10進数のリストの0の後の各文字の値は、前の値より1大きい値になります。

これはフードの下で'1' == '0' + 1

6

charが数値で表されることを例えば意味します。数字0〜9の文字は、昇順の数値で格納されます。 0を基本値として使用すると、単純な減算で0-9の文字を等価のint値に変換することができます

6

可能な重複:See here

まあ'0'は、文字セットに48を表します。したがって、'1''2'のような他の文字値を使ってそれを引いて('0')、'9' - '0'9となります。

注我々は両方の文字をサブしているの違い:'9'から'0'を、ここでは両方がchar