2

これは何をしますか

while(*string) {
    i = (i << 3) + (i<<1) + (*string -'0');
    string++;
}

*文字列-'0'

文字値か何かを削除しますか?

4

3 に答える 3

7

これは、文字stringの ASCII コードを指している文字から減算し'0'ます。だから、'0'-'0'を与えて0、そして'9'-'0'を与えます9

stringループ全体は基本的に、文字列が指す10進整数の数値を「手動で」計算しています。

これi << 3は、 is equal to i * 8and i << 1is equal to i * 2and (i << 3) + (i<<1)is equal to i * 8 + i * 2orのためi * 10です。

于 2012-10-17T04:29:42.903 に答える
3

数字 0 ~ 9 は文字セットに連続して格納されることが保証されているため、減算すると、'0'文字数字の整数値が得られます。

ASCII を使用しているとしましょう:

char digit = '6'; //value of 54 in ASCII
int actual = digit - '0'; //'0' is 48 in ASCII, therefore `actual` is 6.

数字が文字セットにどのような値を持っていても、数字は連続している'0'ため、数字から先頭 ( ) を引くと、探している数字が得られます。文字については特にそうではないことに注意してください。たとえば、EBCDIC を見てください。

于 2012-10-17T04:29:09.263 に答える
2

0 ~ 9 文字の ASCII 値を数値に変換します。

'0' (文字) の ASCII 値は 48 で、'1' は 49 です。したがって、48-56('0'-'9') を 0-9 に変換するには、ASCII 値から 48 を引くだけです。それがあなたのコード行 [ *string -'0' ] が行っていることです。

于 2012-10-17T04:28:34.740 に答える