什么是字符串 - '0'(字符串是一个字符)

时间:2012-10-17 04:25:01

标签: c string char

这是做什么的

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

* string -'0'

是否删除了字符值?

3 个答案:

答案 0 :(得分:7)

string指向字符'0'的ASCII代码的字符中减去。因此,'0' - '0'会为您提供0等等,'9' - '0'会为您提供9

整个循环基本上是“手动”计算字符串string中指向的十进制整数的数值。

这是因为i << 3相当于i * 8i << 1相当于i * 2(i << 3) + (i<<1)相当于i * 8 + i * 2或{{1} }}

答案 1 :(得分:2)

它将ascii值0-9个字符转换为其数值。

'0'(字符)的ASCII值为48,'1'为49。 因此,要将48-56('0' - '9')转换为0-9,您只需要从ascii值中减去48。 这就是你的代码行[* string -'0']正在做的事情。

答案 2 :(得分:2)

由于数字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。