Разница между типами данных 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;
Другие вопросы по тегам