特定の char を int に変換するには、[atoi() を除いて] 次のコードが可能であることを知っています。
int i = '2' - '0';
しかし、それがどのように機能するか、「0」の意味がわかりませんでした。それについてネット上で説明が見つからないようです。
前もって感謝します!!
特定の char を int に変換するには、[atoi() を除いて] 次のコードが可能であることを知っています。
int i = '2' - '0';
しかし、それがどのように機能するか、「0」の意味がわかりませんでした。それについてネット上で説明が見つからないようです。
前もって感謝します!!
Cでは、文字リテラルのタイプはint
。です。[文字リテラル/IBM ]
あなたの例では、の数値'0'
は48、の数値'2'
は50です。そうすると、'2' - '0'
が得られ50 - 48 = 2
ます。これは、0から9までのASCII番号で機能します。
より良い画像を取得するには、ASCIIテーブルを参照してください。
編集:訂正してくれた@ouahに感謝します。
C のすべての文字は、文字の ASCII コードである整数値で表されます。たとえば、「0」は 48 に対応し、「2」は 50 に対応し'2'-'0'
ます。50-48 = 2
ASCII テーブルへのリンク: http://www.robelle.com/smugbook/ascii.html
対応する文字のASCIIコードがすべてです。
Cでは、すべての数字(0〜9)がASCIIで値48〜57によって順番にエンコードされます。したがって'0'
、実際には値48を取得'2'
し、値は50になります。したがって、を書き込むint i = '2' - '0';
と、実際には50から48を減算し、2を取得します。
'0'
to'9'
は、すべての文字セットでCの順次値であることが保証されています。これはASCIIに限定されず、CはASCII文字セットに限定されません。
したがって、ここでシーケンシャルとは、'2'
値が。であることを意味します'0' + 2
。
との値はCのタイプであり、タイプではないことint
に注意char
してください。文字リテラルはタイプです。'0'
'9'
int
char
int
両方の用語は、内部的には数値のASCIIコードで表され、数字には連続したASCIIコードがあるため、それらを減算すると、2つの数値の違いがわかります。
文字でも同様のトリックを行うことができます。たとえば、小文字から32を引くことにより、小文字から大文字にシフトします。
'a' - 32 = 'A'
コンマを使用すると' '
、数値を char として扱います。これを int に指定すると、int はこの文字の ASCII コードの値を取ります。
一重引用符で囲まれた文字リテラルは、その文字の ASCII コードを表す数値に対応します。実際、そのようなリテラルは ではなく に評価されるchar
ためint
、他の数値リテラルと完全に交換可能です。
あなたの式の中で、'2'
は と交換可能で50
あり、'0'
は と交換可能48
です。
ASCII テーブルを見てください。
'0'
は 0x30 として'9'
表され、0x32 として表されます。
これにより、
0x32 - 0x30 = 2