C中的这段代码是如何工作的

时间:2011-10-20 09:36:28

标签: c

我在c中获得了一个代码,它将执行atoi功能的功能,但我不知道它的工作原理

int main(int argc, char* argv[])
{
  printf("\n%d\n", myatoi("1998")); 
  getch();
  return(0);
}

int myatoi(const char *string)
{
  int i;
  i=0;
  while(*string)
  {
    i=(i<<3) + (i<<1) + (*string - '0');
    string++;
  }
  return(i);
}

在上面的代码中没有增加并且总是为零,那么(i&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&#1)将如何影响代码?

2 个答案:

答案 0 :(得分:2)

(i<<3) + (i<<1)(至少为正数)相当于乘以10,因为i<<3将整数向左移3位(即乘以8)和i<<1位移左边的整数乘1位(即乘以2)。

每当您遇到一个新数字时,它会将当前数字乘以10并添加新数字(即如果您当前的数字是199并且遇到数字8,那么您的新数字应为1998 = 10 * 199 + 8。

减去'0'的原因是,如果你的字符是用ASCII编码的,你需要将ASCII码转换回数字。

答案 1 :(得分:0)

要理解此代码,您需要了解:

  • (i<<3),我的意思是位操作符

  • *stringstring++,我指的是字符串操作,更常见的是对指针的操作。

您还需要知道字符串在C中的表示方式以及数字在ASCII中的表示方式。