1

特定の char を int に変換するには、[atoi() を除いて] 次のコードが可能であることを知っています。

int i = '2' - '0';

しかし、それがどのように機能するか、「0」の意味がわかりませんでした。それについてネット上で説明が見つからないようです。

前もって感謝します!!

4

10 に答える 10

8

Cでは、文字リテラルのタイプはint。です。[文字リテラル/IBM ]

あなたの例では、の数値'0'は48、の数値'2'は50です。そうすると、'2' - '0'が得られ50 - 48 = 2ます。これは、0から9までのASCII番号で機能します。

より良い画像を取得するには、ASCIIテーブルを参照してください。

編集:訂正してくれた@ouahに感謝します。

于 2012-07-11T12:49:09.380 に答える
3

C のすべての文字は、文字の ASCII コードである整数値で表されます。たとえば、「0」は 48 に対応し、「2」は 50 に対応し'2'-'0'ます。50-48 = 2

ASCII テーブルへのリンク: http://www.robelle.com/smugbook/ascii.html

于 2012-07-11T12:50:14.150 に答える
2

対応する文字のASCIIコードがすべてです。

Cでは、すべての数字(0〜9)がASCIIで値48〜57によって順番にエンコードされます。したがって'0'、実際には値48を取得'2'し、値は50になります。したがって、を書き込むint i = '2' - '0';と、実際には50から48を減算し、2を取得します。

于 2012-07-11T12:51:01.293 に答える
2

'0'to'9'は、すべての文字セットでCの順次値であることが保証されています。これはASCIIに限定されず、CはASCII文字セットに限定されません。

したがって、ここでシーケンシャルとは、'2'値が。であることを意味します'0' + 2

との値はCのタイプであり、タイプではないことintに注意charしてください。文字リテラルはタイプです。'0''9'intcharint

于 2012-07-11T12:51:09.037 に答える
2

両方の用語は、内部的には数値のASCIIコードで表され、数字には連続したASCIIコードがあるため、それらを減算すると、2つの数値の違いがわかります。

文字でも同様のトリックを行うことができます。たとえば、小文字から32を引くことにより、小文字から大文字にシフトします。

'a' - 32 = 'A'
于 2012-07-11T12:51:49.857 に答える
2

コンマを使用すると' '、数値を char として扱います。これを int に指定すると、int はこの文字の ASCII コードの値を取ります。

于 2012-07-11T12:49:38.993 に答える
2

一重引用符で囲まれた文字リテラルは、その文字の ASCII コードを表す数値に対応します。実際、そのようなリテラルは ではなく に評価されるcharためint、他の数値リテラルと完全に交換可能です。

あなたの式の中で、'2'は と交換可能で50あり、'0'は と交換可能48です。

于 2012-07-11T12:50:02.777 に答える
2

ASCII テーブルを見てください。

'0'は 0x30 として'9'表され、0x32 として表されます。

これにより、

0x32 - 0x30 = 2
于 2012-07-11T12:50:19.073 に答える