Разница между длинными и внутренними типами данных

Учитывая, что следующие операторы возвращают 4, в чем разница между типами int и long в С++?

sizeof(int)
sizeof(long)

Ответ 1

От эта ссылка:

Первоначально предполагалось, что int "естественный" размер слова процессор. Многие современные процессоры могут обрабатывать разные размеры слов с равными легкость.

Кроме того, этот бит:

На многих (но не всех) языках C и С++ реализации, длинный больше, чем int. Сегодня самый популярный рабочий стол платформы, такие как Windows и Linux, работать в основном на 32-разрядных процессорах и большинство компиляторов для этих платформ используют 32-битный int, который имеет одинаковый размер и представление как длинное.

Ответ 2

Гарантирует, что стандарт дает вам следующее:

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) кажется очень распространенным.

(Обратите внимание, что long long распознается в C от C99 и далее, но обычно реализуется как расширение на С++ до С++ 11.)

Ответ 3

Вы находитесь на 32-битной машине или 64-битной машине Windows. На моей 64-битной машине (работает Unix-производная O/S, а не Windows), sizeof(int) == 4, но sizeof(long) == 8.

Они разные типы - иногда того же размера, что и друг друга, иногда нет.

(В действительно старые дни, sizeof(int) == 2 и sizeof(long) == 4 - хотя это могло быть за несколько дней до того, как существовал С++, подумайте об этом. Тем не менее, технически это законная конфигурация, хотя и необычная вне встроенное пространство и, возможно, необычно даже во встроенном пространстве.)

Ответ 4

На платформах, где оба они имеют одинаковый размер, ответ - ничто. Оба они представляют собой подписанные 4 байта.

Однако вы не можете зависеть от того, что это правда. Размер long и int не определяются окончательно стандартом. Возможно, компиляторы дают типы разных размеров и, следовательно, нарушают это предположение.

Ответ 5

Длина должна быть, по крайней мере, того же размера, что и int, и, возможно, но не обязательно больше.

В обычных 32-битных системах, как int, так и long, это 4 байта /32 бита, и это справедливо в соответствии со спецификацией С++.

В других системах, как int, так и long long, могут быть разных размеров. Раньше я работал на платформе, где int был 2 байта, а long был 4 байта.

Ответ 6

Типичная передовая практика не использует long/int/short напрямую. Вместо этого, в соответствии со спецификацией компиляторов и ОС, оберните их в файл заголовка, чтобы обеспечить их точное количество бит, которое вы хотите. Затем используйте int8/int16/int32 вместо long/int/short. Например, на 32-битном Linux вы можете определить заголовок, подобный этому

typedef char int8;
typedef short int16;
typedef int int32;
typedef unsigned int uint32;