В чем разница между "длинный", "длинный", "долгий интервал", и "длинный инт" в C++?
Я перехожу с Java на C++ и у меня есть некоторые вопросы о long
тип данных. В Java, чтобы содержать целое число больше 232, вы можете просто написать long x;
. Однако, в C++, кажется, что long
является как типом данных, так и модификатором.
кажется, есть несколько способов использовать long
:
long x;
long long x;
long int x;
long long int x;
также, кажется, есть такие вещи, как:
long double x;
и так далее.
в чем разница между всеми из этих различных типов данных, и все ли они имеют одну и ту же цель?
5 ответов:
long
иlong int
идентичны. Так же как иlong long
иlong long int
. В обоих случаяхint
не является обязательным.что касается разницы между двумя наборами, стандарт C++ предписывает минимальные диапазоны для каждого, и это
long long
на по крайней мере какlong
.управляющие части стандарта (C++11, но это было вокруг в течение длительного времени), например,
3.9.1 Fundamental types
, раздел 2 (более поздний раздел дает аналогичные правила для неподписанных интегральные типы):существует пять стандартных целочисленных типов со знаком: signed char, short int, int, long int и long long int. В этом списке каждый тип предоставляет по крайней мере столько же памяти, сколько и предшествующие ему в списке.
есть также Таблица 9 в
7.1.6.2 Simple type specifiers
, который показывает "сопоставления" спецификаторов с фактическими типами (показывая, чтоint
является необязательным), раздел которого показан ниже:Specifier(s) Type ------------- ------------- long long int long long int long long long long int long int long int long long int
обратите внимание на различие там между спецификатором и типом. Спецификатор-это то, как вы сообщаете компилятору, что такое тип, но вы можете использовать разные спецификаторы, чтобы получить один и тот же тип.
отсюда
long
сам по себе не является ни типом , ни модификатор, как ваш вопрос подразумевает, это просто описатель дляlong int
тип. То же самое дляlong long
будучи спецификатором дляlong long int
тип.хотя сам стандарт C++ не определяет минимальные диапазоны интеграла типы, он цитирует C99, в
1.2 Normative references
, как применение. Следовательно, минимальные диапазоны, как указано вC99 5.2.4.2.1 Sizes of integer types <limits.h>
применимы.
С точки зрения
long double
, что на самом деле значение с плавающей точкой, а не целое число. Подобно целочисленным типам, требуется иметь по крайней мере такую же точность, как Adouble
и предоставить надмножество значений над этим типом (что означает по крайней мере эти значения, не обязательно больше значения).
Long и long int - это не менее 32 бит.
long long и long long int - это не менее 64 бит. Вы должны использовать компилятор c99 или лучше.
длинные дубли немного странные. посмотрите их на Википедии для деталей.
long
эквивалентноlong int
, так же как иshort
эквивалентноshort int
. Аlong int
- это целочисленный тип со знаком по крайней мере 32 бит, в то время какlong long
илиlong long int
является знаковым целочисленным типом по крайней мере 64 бит.это не обязательно означает, что a
long long
шире, чемlong
. Многие платформы / ABIs используютLP64
модель - гдеlong
(и указатели) имеют ширину 64 бита. Х64 используетLLP64
, гдеlong
is еще 32 бита, иlong long
(и указатели)имеют ширину 64 бита.есть хорошее резюме 64-битных моделей данных здесь.
long double
не гарантирует ничего, кроме того, что это будет по крайней мере шириной сdouble
.
это выглядит запутанным, потому что вы принимаете
long
как сам тип данных.
long
Это не что иное, как просто стенография дляlong int
когда вы используете его в покое.
long
- Это модификатор, вы можете использовать его сdouble
и какlong double
.
long
==long int
.оба они занимают 4 байта.
исторически, в ранние времена C, когда процессоры имели 8 или 16 бит длины слова,
int
был идентичен сегодняшнемуshort
(16 бит). В определенном смысле, int является более абстрактным типом данных, чемchar
,short
,long
илиlong long
, так как вы не можете быть уверены в битовой ширине.при определении
int n;
вы можете перевести это с помощью "дайте мне лучший компромисс битовой ширины и скорости на этой машине для n". Возможно, в будущем вы должны ожидать, что компиляторы переведутint
на 64 немного. Поэтому, когда вы хотите, чтобы ваша переменная имела 32 бита и не более, лучше использовать явныйlong
тип данных.[Edit:
#include <stdint.h>
кажется, это правильный способ обеспечить битовую ширину с использованием типов int##_t, хотя это еще не часть стандарта.]