Int V / S. долго в C - PullRequest
       15

Int V / S. долго в C

4 голосов
/ 29 сентября 2010

В моей системе я получаю:

sizeof ( int )  = 4
sizeof ( long ) = 4

Когда я проверял с помощью программы на C, оба значения int & long переполнялись до отрицательного значения после:

a = 2147483647;
a++;

Если оба могут представлять один и тот же диапазон чисел, зачем мне использовать ключевое слово long?

Ответы [ 8 ]

7 голосов
/ 29 сентября 2010

int имеет минимальный диапазон от -32767 до 32767, тогда как long имеет минимальный диапазон от -2147483647 до 2147483647.

Если вы пишете переносимый код, который может быть скомпилирован на другом Cреализации, то вы должны использовать long, если вам нужен этот диапазон.Если вы пишете только непереносимый код для одной конкретной реализации, то вы правы - это не имеет значения.

6 голосов
/ 29 сентября 2010

Потому что sizeof (int) == sizeof (long) не всегда верно. int normaly представляет самый быстрый размер как минимум 2 * 8 бит. с другой стороны, длина не менее 4 * 8 бит.

5 голосов
/ 29 сентября 2010

C определяет количество целочисленных типов и определяет соотношение их размеров.По сути, это говорит о том, что sizeof (long long)> = sizeof (long)> = sizeof (int)> = sizeof (short)> = sizeof (char) и этот sizeof (char) == 1.

Но фактические размеры не определены и зависят от архитектуры, на которой вы работаете.На 32-битном ПК int и long обычно составляют четыре байта, а long long - 8 байтов.Но в 64-битной системе long обычно составляет 8 байтов и, таким образом, отличается от int.

Существует также тип с именем uintptr_t (и intptr_t), который гарантированно будет иметь тот же размер, что и указатели данных.1005 *

Важно помнить, что нельзя предполагать, что вы можете, например, хранить значения указателя в long или int.Быть переносимым, вероятно, важнее, чем вы думаете, и вполне вероятно, что вы захотите скомпилировать свой код в 64-битной системе в ближайшем будущем.

0 голосов
/ 29 сентября 2010

Размер типа данных зависит от компилятора. Различные компиляторы имеют разный размер типа int и других типов данных.

Так что, если вы создаете код, который будет работать на другой машине, вы должны использовать long или это зависит от диапазона значения, которое может иметь переменная.

0 голосов
/ 29 сентября 2010

Размер встроенных типов данных варьируется в зависимости от реализации C, но все они имеют минимальные диапазоны.В настоящее время тип int обычно имеет длину 4 байта (32 бита), поскольку большинство ОС являются 32-битными.Обратите внимание, что символ всегда будет 1 байтом.

0 голосов
/ 29 сентября 2010

Это зависит от компилятора, и вы можете проверить это: Что стандарт C ++ устанавливает размер типа int, long?

0 голосов
/ 29 сентября 2010

На разных платформах или с другим компилятором, int и long могут отличаться. Если вы не планируете переносить код на что-то другое или использовать другой компьютер, выберите тот, который вам нужен, это не будет иметь значения.

0 голосов
/ 29 сентября 2010

Я думаю, что это больше проблема компилятора, так как компьютеры работают намного быстрее и требуют большего числа, как это было раньше.

...