2015-05-09 66 views
0

爲什麼不能正常工作?爲什麼printf轉換大數字?

printf("%d \n\n\n\n", atoi("11110010100")); 

它輸出-1774891788 ...我只是想要它輸出,因爲它是。如果數字稍小一些,似乎工作得很好。

+4

你可以試試這個方法將字符串解析爲Double? –

+2

'11110010100'在基數10中轉換爲基數2爲'1010010110001101010100110011110100'(34位) – pmg

回答

4

atoi返回int。您傳遞的字符串包含的數字大於int(在您的實現中)可以容納的數字。所以,你有一個整數溢出。

要打印最大值可以容納一個int,包括limits.h和打印INT_MAX

+0

您能否詳細說明您將如何使用INT_MAX? – something

+0

'printf(「%i」,INT_MAX);'當你包含'limits.h'' –

1

INT的atoi(常量字符* STR)將字符串轉換爲整數,並且能夠至少包含的基本符號整型[-32767,+ 32767]範圍,

的11110010100比整數存儲能力更大,所以你有溢出。爲什麼你認爲問題是`printf`而不是與'atoi` ATOF
http://www.lemoda.net/c/string-to-double/

+3

現在找到一個使用兩字節整數類型的系統將是一個例外。 –

+0

不,kamel是正確的:根據K&R,** 2.2數據類型和大小**,「整數*至少爲* 16位」(另見http://stackoverflow.com/a/11438985/2564301)。 'atoi'返回一個'int'。 – usr2564301

相關問題