Разница между типами данных long и int
Учитывая, что следующие утверждения возвращают 4
какая разница между int
а также long
типы в C++?
sizeof(int)
sizeof(long)
6 ответов
Из этой ссылки:
Первоначально предполагалось, что int будет "естественным" размером слова процессора. Многие современные процессоры могут одинаково легко обрабатывать слова разных размеров.
Также этот бит:
Во многих (но не во всех) реализациях C и C++ long больше, чем int. Самые популярные на сегодняшний день настольные платформы, такие как Windows и Linux, работают в основном на 32-битных процессорах, и большинство компиляторов для этих платформ используют 32-битные int, которые имеют тот же размер и представление, что и long.
Гарантии, которые дает вам стандарт, выглядят так:
1 == sizeof(char) <= sizeof(short) <= sizeof (int) <= sizeof(long) <= sizeof(long long)
Так что это совершенно верно для sizeof (int)
а также sizeof (long)
быть равными, и многие платформы выбирают такой подход. Вы найдете несколько платформ, где int
32 бита, long
составляет 64 бита, и long long
128 бит, но это кажется очень распространенным для sizeof (long)
быть 4.
(Обратите внимание, что long long
распознается в C начиная с C99, но обычно реализуется как расширение в C++ до C++11.)
Вы на 32-битной машине или на 64-битной машине с Windows. На моей 64-битной машине (под управлением производной от Unix операционной системы, а не Windows), sizeof(int) == 4
, но sizeof(long) == 8
,
Они разных типов - иногда одного размера, иногда нет.
(В действительно старые времена, sizeof(int) == 2
а также sizeof(long) == 4
- хотя, возможно, это были дни до появления C++, подумайте об этом. Тем не менее, технически, это допустимая конфигурация, хотя и необычная вне встроенного пространства, и вполне возможно необычная даже во встроенном пространстве.)
На платформах, где они имеют одинаковый размер, ответ - ничто. Они оба представляют 4-байтовые значения со знаком.
Однако вы не можете полагаться на то, что это правда. Размер long и int не определены стандартом. Компиляторы могут задавать типам разные размеры и, следовательно, нарушать это предположение.
Длина long должна быть как минимум того же размера, что и int, и, возможно, но не обязательно, long.
В обычных 32-битных системах int и long являются 4-байтовыми /32-битными, и это допустимо в соответствии со спецификацией C++.
В других системах int и long long могут иметь разные размеры. Раньше я работал на платформе, где int был 2-байтовым, а long - 4-байтовым.
Типичная лучшая практика - не использовать long / int / short напрямую. Вместо этого, в соответствии со спецификацией компиляторов и ОС, оберните их в файл заголовка, чтобы убедиться, что они содержат именно то количество битов, которое вам нужно. Затем используйте int8/int16/int32 вместо long/int/short. Например, в 32-битном Linux вы можете определить такой заголовок
typedef char int8;
typedef short int16;
typedef int int32;
typedef unsigned int uint32;