В чем разница между long long и long int - PullRequest
11 голосов
/ 11 августа 2011

Я знаю разницу между long и int. Но в чем разница между "long long" и "long int"

Ответы [ 8 ]

25 голосов
/ 11 августа 2011

Есть несколько сокращений для встроенных типов.

  • short is (signed) short int
  • long is (signed) long int
  • long long - это (signed) long long int.

Во многих системах short является 16-разрядным, long является 32-разрядным иlong long является 64-битным.Однако имейте в виду, что стандарт требует только

sizeof(char) == 1
sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)

И следствием этого является то, что в экзотической системе sizeof(long long) == 1 возможно.

10 голосов
/ 11 августа 2011

В соответствии со стандартом C целочисленные типы определены как минимум для следующих диапазонов:

int                     -32767 to               +32767 representable in 16 bits
long               -2147483647 to          +2147483647 representable in 32 bits
long long -9223372036854775807 to +9223372036854775807 representable in 64 bits

Каждый может быть представлен как для поддержки более широкого диапазона. В распространенных 32-битных системах int и long имеют одинаковое 32-битное представление.

Обратите внимание, что отрицательные границы симметричны своим положительным аналогам, чтобы обеспечить представление знаков и величин: стандарт языка C не налагает два дополнения.

4 голосов
/ 11 августа 2011

long long может быть больше, чем long int.Например, для x86 32 * бит long long будет 64-битным типом, а не 32 бит для long int.

3 голосов
/ 20 августа 2011

В 64-битных системах их размеры не имеют значения.На длинных 32-битных системах гарантированно хранятся значения 64-битного диапазона.

Просто, чтобы избежать всех этих недоразумений, всегда лучше использовать стандартные целочисленные типы: (u)int16_t, (u)int32_t and (u)int64_t доступно через stdint.h, что обеспечивает прозрачность.

2 голосов
/ 11 августа 2011

Значение int в 16-битных системах составляло 16 бит.«long» было введено как 32-разрядное целое число, но в 32-разрядных системах long и int означают одно и то же (оба являются 32-разрядными.) Так что в 32- и 64-разрядных системах long long и long int являются 64-битными.Исключение составляет 64-битная UNIX, где long равно 64-битным.

Более подробную таблицу смотрите в целочисленной статье Википедии .

1 голос
/ 11 августа 2011

Стандарт C не предъявляет никаких особых требований к ширине для целочисленных типов, кроме минимальных диапазонов значений, которые тип должен иметь возможность представлять, и что ширина не уменьшается: short <= int <= long int <= long long int (аналогично для беззнаковыхтипов).Кстати, long long стал частью стандарта только в C99 и C ++ 0x.Минимальные требуемые диапазоны можно найти в этой статье Википедии .

1 голос
/ 11 августа 2011

long int является синонимом для long. long long int является синонимом long long.

Единственная гарантия, которую вы имеете в стандарте C ++, заключается в том, что long long по крайней мере равен long, но может быть длиннее. Это указано в §3.9.1.2 в самом последнем общедоступном проекте стандарта n3242.

0 голосов
/ 11 августа 2011

I думаю :

"long" удваивает количество битов, выделенных для типа данных.Так долго (32 бита?) Становится 64 бита.Int (16 бит?) Становится 32 бит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...