2014-10-08 2 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

+0

Как вы «знаете», что самый большой «unsigned int» - 65535? –

ответ

4

Вы ошибаетесь в своем убеждении, что максимальное число для unsigned int равно 65535. Этого не было для большинства компиляторов, поскольку, возможно, в первые дни Windows 95, когда у нас были 16-разрядные процессоры.

Стандарты НЕ определяют размер любого интегрального типа; они определяют только отношение размеров друг к другу. (long long> = long> = int> = short> = char ... и т. д.) Фактические размеры, хотя и невероятно распространенные и согласованные, определяются реализацией вашего компилятора и, как правило, определяются платформой.

Это не означает, что большинство 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). –

+0

Да, я знаю, я ушел с C, так как знал это лучше. Я добавлю, что в – UpAndAdam

+0

@sharth - это что-то C++ 11? – UpAndAdam

3

Как показано в http://www.tutorialspoint.com/cprogramming/c_data_types.htm (и во многих других местах), беззнаковое целочисленное значение может быть 2 байта или 4 байта. В вашем случае вы используете 4 байта, поэтому максимальный размер составляет 4 294 967 295.

Максимальное количество упоминаний, 65535 соответствует 2 байтам.

0

Следующий код даст вам максимальное значение без знака междунар на вашей системе:

#include <stdio.h> 

typedef unsigned int  ui; 

int main() 
{ 
    ui uimax = ~0; 

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

    return 0; 
} 

типа Int только определяют соотношение между их размерами не их фактический размер например

неподписанных долго долго Int> = неподписанных долго Int> = неподписанные Int> = беззнаковый короткий Int> = неподписанный символ

+1

Было бы более понятно использовать один из встроенных средств, чтобы получить максимальный размер. –

+0

Яснее вы говорите проще? Просто я не знаю, насколько я понятнее ... Извините, что я ноб на этом форуме ..... – user2419083

+1

'std :: numeric_limits :: max()', хотя wordy , делает цель чистой. –

Смежные вопросы