Учитывая, что следующие операторы возвращают 4, в чем разница между типами int и long в C ++?
sizeof(int)
sizeof(long)
Учитывая, что следующие операторы возвращают 4, в чем разница между типами int и long в C ++?
sizeof(int)
sizeof(long)
Из этой ссылки:
Первоначально предполагалось, что 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.)
sizeof(char)==sizeof(short), верно?
- person Walter Tross; 04.09.2013
sizeof(char) == sizeof(short) && sizeof(char) == sizeof(int) && sizeof(int) == 1, и этот размер составлял не менее 32 бита.
- person Jonathan Leffler; 18.01.2015
Вы работаете на 32-битной машине или 64-битной машине с Windows. На моей 64-битной машине (под управлением ОС Unix, а не Windows) sizeof(int) == 4, но sizeof(long) == 8.
Они разных типов - иногда одного размера, иногда нет.
(В старые времена sizeof(int) == 2 и sizeof(long) == 4 - хотя, если подумать, это могло быть за дни до того, как C ++ существовал. Тем не менее, технически это законная конфигурация, хотя и необычная за пределами встроенного пространства, и, вполне возможно, необычная даже во встроенном пространстве.)
sizeof(long), что вряд ли педантично. Так что я со Стивом.
- person Cookie; 22.05.2015
На платформах, где они имеют одинаковый размер, ответ - ничто. Оба они представляют собой 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;
<cstdint>, см. здесь: en.cppreference.com / w / cpp / types / integer
- person jogojapan; 28.05.2013