爲什麼不能正常工作?爲什麼printf轉換大數字?
printf("%d \n\n\n\n", atoi("11110010100"));
它輸出-1774891788 ...我只是想要它輸出,因爲它是。如果數字稍小一些,似乎工作得很好。
爲什麼不能正常工作?爲什麼printf轉換大數字?
printf("%d \n\n\n\n", atoi("11110010100"));
它輸出-1774891788 ...我只是想要它輸出,因爲它是。如果數字稍小一些,似乎工作得很好。
atoi
返回int
。您傳遞的字符串包含的數字大於int
(在您的實現中)可以容納的數字。所以,你有一個整數溢出。
要打印最大值可以容納一個int
,包括limits.h
和打印INT_MAX
。
您能否詳細說明您將如何使用INT_MAX? – something
'printf(「%i」,INT_MAX);'當你包含'limits.h'' –
INT的atoi(常量字符* STR)將字符串轉換爲整數,並且能夠至少包含的基本符號整型[-32767,+ 32767]範圍,
的11110010100比整數存儲能力更大,所以你有溢出。爲什麼你認爲問題是`printf`而不是與'atoi` ATOF
http://www.lemoda.net/c/string-to-double/
現在找到一個使用兩字節整數類型的系統將是一個例外。 –
不,kamel是正確的:根據K&R,** 2.2數據類型和大小**,「整數*至少爲* 16位」(另見http://stackoverflow.com/a/11438985/2564301)。 'atoi'返回一個'int'。 – usr2564301
:
你可以試試這個方法將字符串解析爲Double? –
'11110010100'在基數10中轉換爲基數2爲'1010010110001101010100110011110100'(34位) – pmg