Для чего используется "длинный" тип данных?
Я программировал на С++ уже довольно давно, и я хорошо знаком с большинством вещей. Одна вещь, которую я никогда не понимал, - это "длинный" тип данных.
Я 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
не имеет согласованной семантики.