2014-10-08 3361 views
-5

我寫了一個程序,用unsigned int找到最後一個斐波那契數。這是1836311903,但我認爲unsigned int的最大值是65535。發生什麼了?unsigned int的最大值是多少?

while(true) 
    { 
     sequence[j] = sequence[j-1] + sequence[j-2]; 
     if(sequence[j-1]>sequence[j]) break; 
     j++; 
    } 

    printf("%d", sequence[j-2]); 
+1

除非你有2個字節的無符號'int's,在'最大數量的無符號int'絕對是大於65535. – wolfPack88 2014-10-08 19:56:22

+0

你如何「知道」最大的'unsigned int'是65535? – 2014-10-08 20:00:43

回答

4

你錯誤地認爲unsigned int的最大值是65535.對於大多數編譯器來說,大多數編譯器都沒有這種情況,因爲我們有16位處理器的時候可能早在windows 95以前。

該標準不定義任何整型的大小;他們只是定義了彼此之間的大小關係。 (long long> = long> = int> = short> = char ... etc)實際的大小雖然非常常見且一致,但是由編譯器的實現來定義,因此通常是平臺定義的。

不能承受大多數int使用處理器上一個單詞的大小;今天通常是32位或64位。

您可以通過sizeof(int)來驗證'爲什麼';然後提高2的權力減去1,你已經得到你的答案最大整數...

更好的辦法是#include <limits.h>#include <climits>並使用它定義的值。 在C++中,您也可以使用std::numeric_limits<unsigned int>::max()

+0

在C++中,我們實際上會使用['std :: numeric_limits :: max()'](http://en.cppreference.com/w/cpp/types/numeric_limits/max)。 – 2014-10-08 19:59:38

+0

是的,我知道,因爲我知道它更好,所以我選擇了C標準。我將在 – UpAndAdam 2014-10-08 20:01:38

+0

中加入@sharth是一個C++ 11的東西嗎? – UpAndAdam 2014-10-08 20:02:46

0

下面的代碼會給您的系統上一個unsigned int的最大值:

#include <stdio.h> 

typedef unsigned int  ui; 

int main() 
{ 
    ui uimax = ~0; 

    printf("uimax %u\n",uimax); 

    return 0; 
} 

int型,只定義它們的大小不是他們的實際大小例如之間的關係

爲unsigned long long int>的= unsigned long int類型> =無符號整型> =無符號短整型> =無符號字符

+1

使用其中一個內置設施來獲得最大尺寸會更加清晰。 – 2015-11-30 00:09:56

+0

更清晰你的意思是更容易?它只是我不知道有多清晰我可以得到...對不起,我是這個論壇的東西noob ..... – user2419083 2015-11-30 00:22:24

+1

'std :: numeric_limits :: max()',雖然羅嗦,使價值的意圖明確。 – 2015-11-30 00:57:27