Разница между длинными и внутренними типами данных
Учитывая, что следующие операторы возвращают 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;