Литерал что это в программировании
Числовые, логические литералы и литералы-указатели
Литерал — это элемент программы, который непосредственно представляет значение. В этой статье рассматриваются литералы типа Integer, float-Point, Boolean и Pointer. Дополнительные сведения о строковых и символьных литералах см. в разделе строковые и символьные литералы (C++). Можно также определить собственные литералы на основе любой из этих категорий. Дополнительные сведения см. в разделе определяемые пользователем литералы (C++).
Литералы можно использовать во многих контекстах, но наиболее часто они используются для инициализации именованных переменных и для передачи аргументов в функции.
Целочисленные литералы
Целочисленные литералы начинаются с цифры и не имеют дробных частей или экспонент. Целочисленные литералы можно указать в десятичной, двоичной, восьмеричной или шестнадцатеричной форме. При необходимости можно указать целочисленный литерал как неподписанный, а в качестве типа long или long — с помощью суффикса.
Если префикс или суффикс отсутствует, компилятор выдает целочисленный тип литерального значения int (32 бит), если значение подходит, в противном случае присваивает ему тип long long (64 бит).
Чтобы указать десятичный целочисленный литерал, начинайте спецификацию с любой цифры, кроме нуля. Пример:
Чтобы указать восьмеричный целочисленный литерал, начинайте спецификацию с нуля, за которым следует ряд цифр в диапазоне от 0 до 7. Цифры 8 и 9 при указании восьмеричного литерала будут ошибками. Пример:
Чтобы указать шестнадцатеричный целочисленный литерал, начните спецификацию с 0x или 0X (регистр «x не важен)», за которым следует последовательность цифр в диапазоне от 0 до 9 и a (или A ) до f (или F ). Шестнадцатеричные цифры от a (или A ) до f (или F ) представляют собой значения в диапазоне от 10 до 15. Пример:
Разделители цифр. символ одинарной кавычки (апостроф) можно использовать для разделения значений в больших числах, чтобы облегчить чтение людям. Разделители не влияют на компиляцию.
Литералы с плавающей запятой
Литералы с плавающей запятой задают значения, которые должны иметь дробную часть. Эти значения содержат десятичные разделители ( . ) и могут содержать экспоненты.
Литералы с плавающей запятой имеют значащим (иногда называется мантиссаом), который указывает значение числа. Они имеют показатель степени, который указывает величину числа. И имеют необязательный суффикс, указывающий тип литерала. Значащим указывается как последовательность цифр, за которыми следует точка, за которой следует дополнительная последовательность цифр, представляющая дробную часть числа. Пример:
Если указан показатель степени, он задает порядок числа в виде степени 10, как показано в следующем примере:
Хотя long double и double имеют одинаковое представление, они имеют разные типы. Например, можно использовать перегруженные функции, такие как
логические литералы
Литерал-указатель (C++11)
Двоичные литералы (C++14)
Двоичный литерал можно задать с помощью префикса 0B или 0b и последовательности, состоящей из 1 и 0:
Избегайте использования литералов как «магических констант»
Несмотря на то что это не всегда является хорошим стилем программирования, можно использовать литералы непосредственно в выражениях и операторах:
В предыдущем примере рекомендуется использовать именованную константу, которая передает ясное значение, например «MAXIMUM_ERROR_THRESHOLD». Если конечные пользователи видят возвращаемое значение Success, возможно, лучше использовать именованную строковую константу. Строковые константы можно хранить в одном месте в файле, который может быть локализован на другие языки. Использование именованных констант помогает обоим и другим пользователям понять смысл кода.
1.9 – Знакомство с литералами и операторами
Литералы
Рассмотрим следующие два выражения:
И литералы, и переменные имеют значение (и тип). Однако значение литерала фиксировано и не может быть изменено (поэтому он называется константой), тогда как значение переменной можно изменить посредством инициализации и присваивания.
Операторы
В математике операция – это математическое вычисление, включающее ноль или более входных значений (называемых операндами), которые создают новое значение (называемое выходным значением). Конкретная выполняемая операция обозначается конструкцией (обычно символом или парой символов), называемой оператором.
Например, в детстве мы все узнали, что 2 + 3 равно 5. В этом случае литералы 2 и 3 являются операндами, а символ + – это оператор, который говорит нам применить математическое сложение к операндам для получения нового значения. 5.
Примечание автора
Количество операндов, которые оператор принимает в качестве входных данных, называется арностью оператора (почти никто не знает, что означает это слово, поэтому не бросайтесь им в разговоре и не ждите, что кто-нибудь поймет, о чем вы говорите). Операторы в C++ бывают трех разных типов арности:
Цепочки операторов
Мы подробнее поговорим о порядке выполнения, когда углубимся в тему операторов. На данный момент достаточно знать, что арифметические операторы выполняются в том же порядке, что и в стандартной математике: сначала скобки, затем степени, затем умножение и деление, затем сложение и вычитание. Этот порядок иногда сокращается PEMDAS, т.е. Parenthesis (скобки), Exponents (степень), Multiplication (умножение) и Division (деление), Addition (сложение) и Subtraction (вычитание), или расширяется до мнемоники «Please Excuse My Dear Aunt Sally» («Прошу прощения, моя дорогая тетя Салли»).
Небольшой тест
Вопрос 1
Какой результат выдаст каждое из следующих выражений:
Литерал (информатика)
Содержание
Описание
В следующем примере 1 и Кот это литералы, а a1, c и cat — переменные:
Типы литералов
Почти все языки программирования допускают использование литералов элементарных типов. Однако, использование различных типов литералов, а также их запись в программах отличается.
Обычно выделяют следующие элементарные типы литералов:
Числовые литералы — литералы, для записи чисел. Иногда, числовые литералы детализируются целые литералы, дробные литералы, с различной точностью представления и записанные в различной системе счисления (например, битовые литералы в PL/I). Обычно, в программах числовые литералы записываются непосредственно числом. В следующем примере 100 и 3.1415 — числовые литералы:
Строковые литералы, обычно, представляют собой строку символов, заключённую в кавычки или скобки. Иногда выделяют, также, символьные литералы, включающие один символ. В разных языках программирования допускаются различные типы кавычек. Например, в следующем примере на языке JavaScript один и два — строковые литералы записанные с использованием различных допустимых типов кавычек:
Логические литералы, Логические значения — два литерала: true и false или их аналоги — T, t, Y, y, F, f, N, n, NIL и т. п.. Например:
Литерал ссылочного типа, адрес в памяти — обычно, числовые литералы, указывающие на ячейку в памяти.
Null-литерал, Пустое значение — особый тип литерала, в зависимости от языка программирования, относящийся к ссылочному либо объектному типу. Единственное допустимое значение этого типа литералов null, или аналог, например NIL, None, Nothing — ссылка никуда не ведёт либо объект отсутствует.
Иногда анонимные функции относят к литералам-функциям, а анонимные объекты к литералам-объектам.
Пользовательские литералы в C++11
Более полугода прошло с момента принятия стандарта C++11. В сети можно найти много материалов посвященных новому стандарту, однако большинство из них касаются самых простых возможностей, самых сладких. Я говорю о лямбда-функциях, системе автоматического выведения типов, новых спецификаторах, умных указателях и т.д. Да, это действительно интересные вещи и, можно смело сказать, они одни из самых полезных и часто используемых. Но на них свет клином не сошелся, и новенький C++11 предлагает нам не только их.
Ниже я хочу рассказать о пользовательских литералах — весьма полезном средстве, хоть и не в повседневных целях.
Что такое литерал?
Литерал — это некоторое выражение, создающее объект. Литералы появились не только в C++11, они были и в C++03. Например, есть литералы для создания символа, строки, вещественных чисел, и т.д.
Все это литералы. С понятием литералов, думаю, мы разобрались. Самое время вернуться к C++11.
Пользовательские литералы в C++11
Как уже было отмечено выше, новый стандарт предлагает средства для создания пользовательских литералов. Существует две категории пользовательских литералов: сырые литералы (raw) и литералы для встроенных типов (cooked).
Стоит, однако, заметить, что C++ позволяет создавать только литералы-суфиксы. Иными словами, создать литералы префиксы (как, например, 0x), или префиксо-суфиксные (как «») — не получится.
Литералы для численных типов
Начнем с литералов для встроенных типов. Чтобы создать литерал для численных типов необходимо воспользоваться одной из двух сигнатур:
Использование литерала будет осуществляется следующим образом:
Ниже приведен пример литерала, преобразовывающего минуты в секунды.
Литералы для строковых типов
Для создания литерала этого типа, необходимо воспользоваться одной из следующих сигнатур:
Сигнатура выбирается в зависимости от типа строки:
Пример литерала преобразующего C-style строку в std::string приведен ниже.
Сырые литералы
Ну и наконец настало время сырого литерала. Сигнатура сырого литерала выглядит следующим образом:
Этот тип литералов приходит на помощь тогда, когда входное число надо разобрать посимвольно. Т.e. в этом случае число передается в оператор как строка. Если не совсем понятно, взгляните на приведенный ниже код:
Используя данный тип литералов, можно написать литерал преобразующий двоичное число в десятичное. Например вот так:
Существует еще одна сигнатура для сырых литералов. Основана она на применении Variadic Template:
Преимущества литералов на базе Variadic Template заключается в том, что они могут вычисляться на этапе компиляции. Тот же литерал преобразования двоичного числа в десятичное может быть переписан так:
У внимательно читателя мог возникнуть вопрос: «А что если создать и сырой литерал, и литерал для числа с одним и тем же именем? Какой литерал компилятор применит?». Стандарт по этому поводу дает точный ответ и говорит о попытке компилятора применить литералы в следующем порядке:
Выводы
Бьёрн Страуструп на конференции Going Native 2012 приводил полезный пример использования литералов. Мне кажется, он наглядно демонстрирует факт повышения читаемости кода, а также снижает вероятность ошибиться.
Механизм пользовательских литералов — это полезный в некоторых случаях инструмент. Использовать его где попало не стоит. Подумайте дважды, прежде чем их использовать, ведь литералы коварны: они могут…
Структура языка программирования
Содержание
Дополнительно
Литерал (литеральная константа) — запись в исходном коде программы, представляющая собой фиксированное значение. Это значение уже нельзя изменить. Допустим у нас есть переменная i
В предложенном коде мы ей присвоили некое значение 45. Это значение и является литералом. Мы можем присваивать литералы только встроенным типам данных: числовым, символьному, логическому.
В случае, если одному типу данных присваивается литерал другого типа данных, то происходит приведение типов. Следовательно, нужно знать, к какому типу относится представленный литерал.
Целочисленные литералы
Представленные языки программирования поддерживают три формы представления целочисленных литералов: восьмеричная, десятичная, шестнадцатеричная.
Отсюда можно вывести следующие правила:
По-умолчанию, если не указано явно, число имеет тип int. Дабы указать, что это тип long или unsigned long, следует использовать буквы u, l, U, L, и их сочетания. Примеры рассмотрены ниже.
Всё вышесказанное верно для всех трёх языков, толь в Java не применяется u, U после численного значения, потому что здесь нет беззнаковых чисел.
Литералы с плавающей точкой
Если не указано явно, число в коде по-умолчанию типа double.
Интересно еще то, что если целая часть равна нуля, то ёё можно просто не указывать, то есть .105 будет вполне нормальным литералом вещественного типа по-умолчанию.
Чтобы указать, что данная литеральная константа принадлежит типу float, нужно добавить к значению f или F. В языке C# еще присутствует тип повышенной точности decimal. Для определения его литералов, к численному значению следует приписывать m или M.
Также, Вы можете записывать любое число в виде мантиссы и порядка, причём, если у порядка не указан знак, значит он положительный. Примеры приведены ниже:
Управляющие последовательности для непечатаемых символов
Некоторые символы являются непечатаемыми. Такие символы никак не отображаются на экране или при печати. Тем не менее при их использовании происходит некоторое действие, как то например, перевод строки, табуляция, оповещение, и тд.
Рассмотрим несколько непечатаемых символов.
Значение | Последовательность |
---|---|
Новая строка | \n |
Вертикальная табуляция | \v |
Возврат каретки | \r |
Оповещение | \a |
Двойная кавычка | \" |
Горизонтальная табуляция | \t |
Возврат на один символ | \b |
Прогон страницы | \f |
Наклонная черта влево | \\ |
Одинарная кавычка | \' |
Логические, символьные и строковые литералы
Как известно, в языке С++ присутствует два символьных типа данных, занимающих разное количество памяти. Чтобы указать, что литерал принадлежит Юникодной кодовой странице, перед символо, помещенным в кавычки, ставят L.
Если Вы перед двойными кавычками слова string не поставите наклонную черту, компилятор выдаст ошибку, ведь строчный литерал закончился, а дальше идут какие-то неправильные символы. На экране появится строка следующего вида.
it is "string" literal