我在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)将如何影响代码?
答案 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)
,我的意思是位操作符和
*string
,string++
,我指的是字符串操作,更常见的是对指针的操作。您还需要知道字符串在C中的表示方式以及数字在ASCII中的表示方式。