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

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

 sizeof(int) sizeof(long) 

Из этой справки:

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

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

Во многих (но не во всех) реализациях C и C ++ длина больше, чем 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-производная O / S, а не Windows), sizeof(int) == 4 , но sizeof(long) == 8 .

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

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

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

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

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

В обычных 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; 
Давайте будем гением компьютера.