2011-10-20 53 views
-2

我在C代碼會做的atoi函數的功能,但我也不怎麼及其工作如何這段代碼在C的工作

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); 
} 

在上面的代碼是沒有得到增加,並且始終是零那麼如何(我會不會影響代碼?)

+0

你確定代碼正在工作嗎? –

+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碼轉換回數字

0

對於理解這段代碼,您需要了解:

  • (i<<3),我的意思是位經營者

  • *stringstring++,我的意思是字符串操作和更普遍的指針操作。

您還需要知道字符串在C中的表示方式以及數字如何用ASCII表示。

+0

(我<< 3)如果我仍然是零而不是沒有什麼需要了解的東西,它總是成爲零 –

+0

'我'被改變了第三屆此外。我希望你知道'while'表示一個循環。 – mouviciel

+0

今天我的一天真的很好睡 –