Для чего используется "длинный" тип данных?

Я программировал на С++ уже довольно давно, и я хорошо знаком с большинством вещей. Одна вещь, которую я никогда не понимал, - это "длинный" тип данных.

Я googled, но я до сих пор не знаю, для чего это нужно. Я нашел страницы, которые говорят, что они одного размера и имеют тот же диапазон, что и int. Так какой смысл использовать его?

Я нашел еще один вопрос относительно этого здесь: Разница между длинными и внутренними типами данных

И кажется, что единственное различие между ними состоит в том, что иногда размер различен для разных систем. Означает ли это, что приложение, использующее long на 64-битной машине, не будет работать на 32-битной машине? Если да, то не лучше ли вообще их использовать?

Также я заметил материал под названием "long int" или даже "long long"! Это тип данных или модификатор?

Ответы

Ответ 1

Он зависит от компилятора. Мои стандарты-фу немного ржавые, но я считаю, что он определяется следующим образом:

char <= short <= int <= long <= long long

где:

char      >= 8 bits
short     >= 16 bits
int       >= 16 bits
long      >= 32 bits
long long >= 64 bits

Это означает, что вполне корректно иметь char = short = int = long = long long = 64bits и на самом деле создаются компиляторы некоторых DSP.


Это подчеркивает важность фактического чтения документации вашего компилятора.

Ответ 2

Я заметил материал под названием "long int" или даже "long long"! Это тип данных или модификатор?

long int совпадает с long (так же, как short int совпадает с short).

long long - это отдельный тип данных, введенный несколькими компиляторами и принятый С++ 0x.

Обратите внимание, что нет такой вещи, как long long long:

error: 'long long long' is too long for GCC

Ответ 3

Из одного из ответов в вопросе, который вы указали:

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

Я не могу придумать лучшего способа объяснить это.

Ответ 4

long гарантируется (по крайней мере) 32 бита. int гарантируется (не менее) 16 бит. на 16- и 8-разрядных системах long предоставляется диапазон с ценой эффективности.

приветствия и hth.,

Ответ 5

Это то, что говорит стандарт С++ 03 (3.9.1/2):

Существуют целые типы четыре: "подписаны char", "short int", "int" и "long int." В этом списке каждый тип обеспечивает как минимум столько предшествующих ему в списке.

Итак: sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long)

Это то, что говорят стандарты С++ 0x (3.9.1/2) и C99 (6.2.5/4):

Существует пять стандартное целое число со знаком типы, обозначенные как подписанные char, short int, int, long int и long long int.

  • long является синонимом long int
  • long long не существует в С++ 03, но будет в С++ 0x.

Ответ 6

Если вы хотите, чтобы целое число было гарантировано равным 32 бит или 64 бит, существуют такие типы, например. int64_t. Если вы действительно хотите, чтобы ваш int был такого размера, используйте эти типы вместо длинных, длинных и т.д. Для них вам нужно включить cstdint (stdint.h в C).

Ответ 7

Я googled, но я до сих пор не знаю за что его. Я нашел страницы, которые скажем, того же размера и имеет одинаковые диапазон как int. Так что будет использовать его?

Я задался вопросом о том же. И пришел к выводу, что long теперь бесполезен.

До появления 64-битных систем стандарт de facto для целых типов C:

  • char= (u) int8_t (Обратите внимание, что C предшествует Unicode.)
  • short= int16_t
  • int= intptr_t [до 64-бит], int_fast16_t
  • long= int32_t [до 64-бит], intmax_t [до 1999 года]
  • long long= int64_t или intmax_t

Сегодня, однако, long не имеет согласованной семантики.