我寫了這個簡單的代碼來生成所有正整數的第四次方,最大值爲1005.它只能工作到215的整數。然後它給出了錯誤的讀數。爲什麼這樣?C代碼只能運行到某個點
# include<stdio.h>
int main(void)
{
int i;
unsigned long long int j;
for (i = 1; i <= 1005; i++){
j = i*i*i*i;
printf("%i.........%llu\n",i,j);
}
return 0;
}
在printf的指定器應改變以匹配新的I型。 –
@EricPostpischil似乎沒有必要,因爲我從來沒有超過整數限制,正如你可以從我的LWS鏈接看到的,我不確定這是否是由於系統特定的內存結構。 –
如果參數不是轉換規範的正確類型,行爲不是由C標準定義的,根據C 2011 7.21.6.1 9.超出數字限制是無關緊要的。考慮到在某些平臺上,一個32位'int'可以在寄存器中傳遞,而64位'unsigned long long'在堆棧上傳遞。當參數實際位於堆棧上時,這將使'printf'使用「%i」的任何位,即使該值在範圍內。參數類型**必須**符合轉換規範。 –