私はCを学ぶ「The C Programming Language」という本を読んでいてs[i] - '0'
、s[i]に格納されている文字の数値を与えると彼らが言った算術に出くわしました。よくわからなかったのですが、どうやって引き算で値を出すのでしょうか? 注 これは、数字の文字列を対応する数値に変換する atoi 関数で使用されます。ありがとう
4 に答える
重複の可能性:こちらをご覧ください
文字セットでよく'0'
表現します。48
したがって、 it( ) を thisの'0'
ような他の文字値で減算すると、それぞれの数値が得られるため、-が得られます。'1'
'2'
'9'
'0'
9
両方の文字がサブである違いに注意してください: '9'
- '0'
、ここでは両方ともchar
'0'
toの文字値は'9'
、C のすべての文字セットで連続した値であることが保証されています。
(C99, 5.1.2p3) 「ソースと実行の両方の基本文字セットで、上記の 10 進数のリストで 0 の後の各文字の値は、前の値よりも 1 大きくなります。」
それは例えば'1' == '0' + 1
フードの下では、 achar
は数値で表されます。数字の 0 ~ 9 の文字は、昇順の数値で格納されます。基本値として使用する0
と、単純な減算で 0 ~ 9 の char を同等の int 値に変換できます。
基本的に、理解する必要があるのは、最新のコンピューターでは、すべての情報が一連のバイトとしてデジタルに保存されるということです。各バイトを解釈する方法を決定するのは、各プログラム次第です。したがって、文字は 1 バイトまたは複数バイト (通常は人間が読める文字または記号を表す数値) にすぎません。たとえば、ASCII では、文字「A」は数値 65 で表されます。
これが意味することは、C などの特定のプログラミング言語では、文字を数値として扱うことができるということです。たとえば、C では、式'A' + 1
によって 66 が得られます。これはたまたまB
(コンパイラ/プラットフォームが ASCII 互換の文字セットを使用していると仮定して) の ASCII 値になります。