Константы в C
Константы — это параметры или переменные внутри компьютерного языка C / C ++, которые, как следует из названия, нельзя изменить после их указания. Это программно эндогенные переменные. Константа — это атрибут или элемент в программе, который нельзя изменить, например 40, 67, x, 7.4, «Java-программирование» и т.д. В языке C существует несколько видов констант, например, целые, символьные, строковые и многие другие.
Эти константы можно представить двумя способами:
- Ключевое слово Const
- #define препроцессор
Чтобы работать с константами, мы должны сначала смонтировать некоторый компилятор языка C в операционной системе Linux. Итак, мы использовали компилятор языка C «GCC» с помощью команды apt. После входа в систему откройте терминал с помощью сочетания клавиш «Ctrl + Alt + T». Выполните указанный ниже запрос, чтобы установить «GCC».
$ sudo apt install gcc
Содержание
- Постоянная переменная
- # Определить препроцессор
- Заключение
Постоянная переменная
После монтирования компилятора «GCC» мы готовы работать с константами. Ключевое слово «const» будет использоваться для указания переменной как константы, что означает, что значение этой константы не может быть изменено. Итак, после открытия терминала создайте новый файл типа C test.c с помощью команды редактора Nano следующим образом:
$ nano test.c
Этот запрос откроет редактор nano с именем файла, указанным вверху. Теперь нам нужно использовать приведенный ниже код в нашем файле. Этот код имеет один заголовочный файл и одну основную функцию. Основная функция содержит одну переменную типа float «val» со значением «3,22». Эта переменная была указана как постоянная с использованием ключевого слова «const» в начале. Затем оператор печати использовался для печати значения постоянной переменной «val», и основная функция будет закрыта. Общий синтаксис для спецификации постоянной переменной сформулирован следующим образом:
Постоянный тип-переменной имя-переменной = значение-переменной;
После сохранения файла с помощью «Ctrl + S» выйдите из файла с помощью сочетания клавиш «Ctrl + X». Теперь мы должны сначала скомпилировать приведенный выше код с помощью компилятора «gcc». Поэтому напишите запрос ниже, чтобы сделать это вместе с именем файла.
$ gcc test.c
Чтобы увидеть результат для этого скрипта языка C, вы должны попробовать команду «a.out» следующим образом:
$ ./a.out
Теперь попробуем изменить значение постоянной переменной val внутри кода. Для этого откройте файл с помощью ключевого слова «nano».
$ nano test.c
Давайте обновим значение переменной «val», присвоив в следующей строке «5.8». Все остальные строки кода останутся прежними. Нажмите Ctrl + S и Ctrl + X, чтобы сохранить и закрыть файл соответственно.
Давайте снова скомпилируем файл test.c, используя команду компиляции «gcc» ниже. Вы получите сообщение об ошибке «присвоение переменной только для чтения». Это означает, что вы не можете изменить значение уже определенной постоянной переменной.
Когда мы снова пытаемся выполнить файл, он будет выводить то же старое значение переменной «val» из-за ключевого слова «const» и не будет обновлять его новым.
# Определить препроцессор
Другой способ определения переменных как констант — использование препроцессора «#define». Чтобы указать константу или микрозаместитель, мы должны отказаться от директивы кода препроцессора #define. Можно использовать любой простой тип данных. Общий синтаксис препроцессора #define следующий:
#define variable-name variable-value
Итак, давайте рассмотрим простой пример #define в нашей системе Ubuntu 20.04 Linux. Откройте командную оболочку и напишите следующую команду, чтобы создать новый файл редактора nano для написания программы C:
$ nano test.c
Мы должны создать такой же код, как показано на изображении ниже. Этот программный сценарий C содержит один заголовок и один основной метод. Мы использовали переменную препроцессора «val» #define с некоторым значением «3. 22» перед основным методом и после файла заголовка. Основная функция содержит один оператор печати, показывающий значение постоянной переменной val. Сохраните, а затем закройте файл, используя сочетания клавиш.
Пришло время скомпилировать сохраненный код. Используйте для этого старый запрос «gcc», как указано ниже.
$ gcc test.c
Мы должны запустить код с помощью инструкции «a.out». Вывод кода показывает значение переменной константы вместе с некоторыми предложениями.
$ ./a.out
Давайте рассмотрим другой пример постоянной переменной с использованием препроцессора #define. Для этого откройте файл «test.c» с помощью команды «nano» в оболочке.
$ nano test.c
На этот раз мы попробовали новый способ понять #define. Мы указали #define при использовании двух переменных, «x» и «y», в функции MAX, чтобы проверить, какая из этих переменных имеет большее значение. Мы также использовали выражение для выполнения функции MAX как «((x)> (y)? (X): (y))». После этого была указана основная функция без возвращаемого типа. Эта основная функция содержит один оператор печати, который будет принимать оба числа в скобках функции MAX и сообщать нам о большем из них.
После сохранения и закрытия этого файла с помощью сочетаний клавиш, давайте скомпилируем файл test.c с запросом компилятора «gcc» в оболочке терминала, как указано ниже:
$ gcc test.c
Чтобы проверить вывод вышеуказанного кода, мы должны запустить скомпилированный файл test.c. Для этой цели мы будем использовать запрос «a.out», как указано ниже. Выходные данные снимка показывают, что эта программа может принимать постоянные значения и решать, какое из значений переменной больше, например 67.
$ ./a.out
Заключение
Наконец, мы проделали отличную работу, рассмотрев два способа представления констант в нашем руководстве, например, ключевое слово «const» и препроцессор «#define». Мы считаем, что этой статьи будет достаточно, чтобы полностью разобраться в константах.
2.4 Константы. C++
2.4 Константы. C++ВикиЧтение
C++
Хилл Мюррей
Содержание
2.4 Константы
С++ дает возможность записи значений основных типов: символьных констант, целых констант и констант с плавающей точкой. Кроме того, ноль (0) может использоваться как константа любого указательного типа, и символьные строки являются константами типа char[]. Можно также задавать символические константы. Символическая константа – это имя, значение которого не может быть изменено в его области видимости. В С++ имеется три вида символических констант: (1) любому значению
любого типа можно дать имя и использовать его как константу, добавив к его описанию ключевое слово const; (2) множество целых констант может быть определено как перечисление; и (3) любое имя вектора или функции является константой.
Константы
Константы
Константы Примеры описания констант:int: 17;float:
Константы
Константы Константа — это именованное фиксированное значение. Для объявления констант используют конструкцию вида: const имя_константы = значение;Например:const Factor = 1.756;Тип константы определяется автоматически по присвоенному ей
Константы
Константы Константа — это число, символ или строка символов. Константы используются в программе для задания постоянных величин. В языке Си различают четыре типа констант: целые, с плавающей точкой, символьные константы и символьные
Константы
Константы Операнду-константе соответствует значение и тип представляющей его константы. Типы констант подробно описаны в разделе 1.2. Символьная константа имеет тип int. Целая константа имеет один из следующих типов: int, long, unsigned int или unsigned long, в зависимости от размера
8.2. Числовые константы
8.2. Числовые константы Интерпретатор командной оболочки воспринимает числа как десятичные, в противном случае числу должен предшествовать специальный префикс, либо число должно быть записано в особой нотации. Числа, начинающиеся с символа 0, считаются восьмеричными.
Константы
Константы В Си++ существует удобное средство определения констант. Если в Си вы должны были пользоваться директивой препроцессора #define, то теперь введено новое ключевое слово const, позволяющее создавать константы. Преимущество в использовании ключевого слова const перед
2.
4 Константы2.4 Константы С++ дает возможность записи значений основных типов: символьных констант, целых констант и констант с плавающей точкой. Кроме того, ноль (0) может использоваться как константа любого указательного типа, и символьные строки являются константами типа char[]. Можно
2.4.1 Целые Константы
2.4.1 Целые Константы Целые константы предстают в четырех обличьях: десятичные, восьмеричные, шестнадцатеричные константа и символьные константы. Десятичные используются чаще всего и выглядят так, как можно было бы ожидать:0 1234 976 12345678901234567890Десятичная константа имеет тип
6.4 Константы
6.4 Константы Константы классового типа определить невозможно в том смысле, в каком 1.2 и 12e являются константами типа double. Вместо них, однако, часто можно использовать константы осноных типов, если их реализация обеспечивается с помощью фунций членов. Общий аппарат для
2.4 Константы
2.4 Константы Как описано ниже, есть несколько видов констант. В #2.6 приводится краткая сводка аппаратных характеристик, которые влияют на их
2.4.6 Описанные Константы
2.4.6 Описанные Константы Объект (#5) любого типа может быть определен как имеющий постоянное значение во всей области видимости (#4.1) его имни. В случае указателей для достижения этого используется декларатор *const; для объектов, не являющихся указателями, используется
Строковые константы
Строковые константы Строковые константы (а точнее, разделяемые строковые объекты) объявляются в языках программирования в манифестной форме с использованием двойных кавычек. Это находит отражение в правилах языка, и как следствие любой компилятор предполагает
Константы
Константы Константы, как мы уже выяснили, — данные, значение которых никогда не меняется. Константами являются, в частности, все числа, строки, логические и специальные значения, записанные в соответствии с правилами конкретного типа данных: 26756 «Строка» true null ActionScript также
Понятия «константа» и «переменная» рассматриваются в одном разделе, потому что эти понятия очень близки по своей сущности. Понятие константыКонстанта — это составная часть программы; объект, имеющий значение. Понятие «константа» в программе аналогично тому же понятию, используемому в математических уравнениях. Это — неизменная величина. Для более полного описания сущности константы, используемой в алгоритмическом языке, обратимся к известным физическим и математическим константам. Человечеством открыты такие константы, значение которых от нас не зависит. К ним в физике относится, например, ускорение свободного падения, равное 9,8 м/с/с, а в математике — число пи = 3,14. Константы такого рода не могут быть признаны аналогией константы в алгоритмическом языке. В математических уравнениях также используется понятие константы. Например, в уравнении Y = 3 * X + 7 числа 3 и 7 являются константами. Значение таких констант в полной мере зависит от воли человека, составившего уравнение. Это — ближайшая аналогия констант, используемых в программах на MQL4. Константа (в виде значения) заносится программистом в код на этапе его создания. Константа характеризуется только своим значением, поэтому термины «константа» и «значение константы» являются полными синонимами. Примеры констант: 37, 3.14, true, "Kazan"
Свойства константСвойством константы является её способность удерживать значение, заданное программистом, в течение времени работы программы и сообщать это значение программе при запросах программы (рис. 5). Для каждой константы, содержащейся в программе, компьютер отводит часть памяти необходимого размера. Значение константы не может быть изменено во время исполнения программы ни программистом, ни компьютером (рис. 6).
Понятие переменнойПеременная — это составная часть программы, имеющая значение и название. Понятие переменной в языке MQL4 аналогично понятию переменной, принятому в математике. Разница между ними состоит лишь в том, что значение переменной в математике подразумевается, а значение переменной в исполняющейся программе хранится в специально отведенной для этого ячейке памяти компьютера. Термин «идентификатор переменной» является полным синонимом терминов «имя переменной» и «название переменной». Переменная заносится создателем кода в его текст на этапе программирования в виде имени переменной. Имя переменной (идентификатор) может состоять из букв, цифр, знака подчёркивания. Однако начинаться оно должно с буквы. Язык MQL4 чувствителен к регистру букв, т.е. S и s — не одно и то же. Примеры идентификаторов переменных: Alpha, alFa, beta, NuMbEr, Num, A_37, A37,
qwerty_123 Свойства переменнойСвойством переменной является её способность получать некоторое значение от программы, удерживать его в течение времени работы программы и сообщать это значение программе при запросах программы. Для каждой переменной в программе компьютер отводит часть памяти необходимого размера. Обратимся к рис. 7 и проследим, как устроены переменные.
В ячейке памяти компьютера содержится значение переменной. Это значение может быть затребовано для обработки и изменено программой. Имя переменной никогда не изменяется. При создании кода программист может назначить переменной любое имя, но с момента, когда готовая программа запущена в работу, ни у программиста, ни у компьютера, ни у программы нет технической возможности изменить название переменной. Если на пути выполнения программы встречается имя переменной, то программа обращается к этой переменной, чтобы получить для обработки её значение. Если программа обратилась к переменной, последняя сообщает программе своё значение. При этом значение переменной остаётся неизменным. Программа же получает в своё распоряжение копию значения, содержащегося в ячейке памяти, выделенной для этой переменной (рис. 8).
В течение некоторого времени переменная не имеет отношений с исполняемой программой. В это время программа может обращаться к другим переменным или производить необходимые вычисления. В период между случаями общения с программой переменная удерживает своё значение, т.е. сохраняет его неизменным. В соответствии с выполняющимся алгоритмом, заложенным в программу, может потребоваться изменение значения переменной. В этом случае программа сообщает переменной её новое значение, а переменная получает это значение от программы. При этом в ячейке памяти производятся необходимые преобразования, в результате которых предыдущее значение переменной удаляется, а на его месте образуется новое значение переменной, сообщённое программой (рис. 9).
Примеры констант и переменных в программеВ программе константы и переменные встречаются в операторах. В данном тексте программы А и В являются переменными, а 7 и 3 — константами: A = 7; // Строка 1 Проследим, как программа работает с константами и переменными. Исполняя эти строки, программа выполнит следующие шаги: Первая строка:
Вторая строка:
В процессе работы программы значение переменной может быть изменено. Например, в программе может встретиться строка, в которой написано следующее: В = 33; // Строка 3 В этом случае при исполнении программы будет выполнено следующее:
Легко заметить, что на некотором этапе выполнения программы переменная В получает значение 10, а в ходе дальнейших вычислений — значение 33. В результате этих событий название переменной В остаётся неизменным, а значение переменной изменяется. На рис. 10 показаны константы и переменные в тексте программы:
Некоторые основные понятияТипы данных
|
Переменные, константы и литералы в Python
В этом руководстве вы узнаете о переменных, константах, литералах в Python и о том, как и где их использовать.
Переменные
Переменная — это отведенное имя в памяти компьютера для хранения данных, у которого есть имя. Переменные — это контейнеры, в которых хранятся данные, которые можно изменить или использовать позже в программе. Например:
number = 10
С помощью этой инструкции мы создали переменную number
и присвоили ей значение 10
.
Значения переменной можно менять по ходу программы.
number = 10 number = 1.1
Изначально значение переменной number
было равно 10
. А потом мы изменили его на 1.1
.
Примечание. На самом деле мы не присваиваем значения переменным. Вместо этого Python свящывает переменную и переданное значение с помощью ссылки.
Присваивание значений переменным
Для присваивания значений переменным в Python существует специальный оператор присваивания =
. Вы могли догадаться об этом из прошлого примера.
# Объявляем переменную и присваиваем ей значение website = "codechick.io" print(website)
Вывод:
codechick.io
В приведенной выше программе мы сначала присвоили значение codechick.io
переменной website
, а затем напечатали значение переменной website
, т.е. вывели на экран строку codechick.io
.
Примечание. Python — динамический (нетипизированный) язык программирования, поэтому определять тип переменных не нужно. Python сам знает, что
"codechick.io"
— строка, поэтому автоматически определит переменнуюwebsite
как строковую.
# Изменяем значение переменной website = "codechick. io" print(website) # присваиваем новое значение переменной website website = "askmentor.io" print(website)
Вывод:
codechick.io
askmentor.io
В приведенной выше программе сначала мы присвоили значение "codechick.io"
переменной website
. А потом изменили значение этой переменной на "askmentor.io"
.
# Присваиваем несколько значений нескольким переменным a, b, c = 5, 3.2, "Привет" print (a) print (b) print (c)
Если мы хотим присвоить одно и то же значение нескольким переменным одновременно, можно сделать это следующим образом:
x = y = z = "одинаковое" print (x) print (y) print (z)
Эта программа присваивает переменным x
, y
, z
значение "одинаковое"
и выводит все три переменные на экран.
Константы
Константа — это постоянная переменная, значение которой нельзя изменить. Представьте, что это контейнер, в котором содержится информация, менять которую мы не можем.
Присваивание значений константе
В Python константы обычно объявляются в модуле. В этом контексте под модулем подразумевается файл, который содержит переменные, функции и т.д. и который можно импортировать в основной файл. Внутри модуля константы записываются заглавными буквами. Если нужно разделить слова, используются подчеркивания.
Создадим файл constant.py:
PI = 3.14 GRAVITY = 9.8
Теперь создадим файл main.py:
import constant print(constant.PI) print(constant.GRAVITY)
Вывод:
3,14
9,8
В приведенной выше программе мы сначала создали файл constant.py — это модуль. В нем мы определяем значение констант PI
и GRAVITY
. Затем мы создали файл main.py, в котором импортировали м модуль constant
и напечатали значения констант.
Примечание. В Python нет неизменяемых переменных (констант), поэтому на самом деле мы объявляем не константы. Мы просто записываем переменные заглавными буквами, чтобы отличать их от обычных, «изменяемых» переменных. Но это не значит, что переназначить «константу» не получится.
Литералы
Литерал — это простейший способ создания объекта. Под литералами понимаются так называемые «сырые» данные, которые хранятся в строке или константе.
В Python есть несколько типов литералов:
Числовые литералы
Числовые литералы неизменяемы (в Python это называется immutable). Они могут принадлежать к 3 числовым типам: Integer
, Float
, и Complex
.
#Целочисленные (integer) литералы a = 0b1010 #двоичный литерал b = 100 #десятичный литерал c = 0o310 #восьмеричный литерал d = 0x12c #шестнадцатеричный литерал #Вещественные (float) литералы float_1 = 10. 2.
3,14j
переменной x
. Затем мы использовали мнимый литерал x.imag
и действительный литерал x.real
для создания мнимой и действительной частей комплексных чисел.👉Подробнее о числовых литералах.
Строковые литералы
Строковый литерал — это последовательность символов, заключенная в кавычки. Мы можем использовать как одинарные, так и двойные или тройные кавычки для строки. Есть еще символьный литерал — это одиночный символ, который тоже заключен в кавычки.
strings = "Это Python" char = "C" multiline_str = """Это многострочная строка.""" unicode = u"\u00dcnic\u00f6de" raw_str = r"сырая \n строка" print(strings) print(char) print(multiline_str) print(unicode) print(raw_str)
Вывод:
Это Python
C
Это многострочная строка.
Ünicöde
сырая \n строка
В приведенной выше программе:
"Это Python"
является строковым литералом, а"C"
— символьным литералом.- Значение в тройных кавычках
"""
, присвоенноеmultiline_str
является многострочным строковым литералом. - Строка
u"\ u00dcnic\u00f6de"
— это unicode-литерал, который поддерживает символы, отличные от английских.\u00dc
— это Ü, а\u00f6
— ö. r"сырая \n строка"
— сырая, то есть необработанная строка.
Логические литералы
Логический литерал может иметь одно из двух значений: True
или False
.
x = (1 == True) y = (1 == False) a = True + 4 b = False + 10 print("x:", x) print("y:", y) print("a:", a) print("b:", b)
Вывод:
x: True
y: False
a: 5
b: 10
В приведенной выше программе мы используем логические литералы True
и False
. В Python True
равно значению 1
, а False
— 0
. Значение переменной x
— True
, потому что 1
равно True
. А значение y
— False
, поскольку 1
не равно False
.
Точно так же мы можем использовать True
и False
в числовых выражениях в качестве значения (1 и 0 соответственно). Значение а
= 5, потому что мы к 4 прибавляем True
, которое равно 1. Точно так же b
= 10, поскольку к 10 мы прибавляем False
, которое равно 0.
Специальные литералы
В Python есть только один специальный литерал — None
. Он указывает на отсутствие значения.
drink = "В наличии" food = None def menu(x): if x == drink: print(drink) else: print(food) menu(drink) menu(food)
Вывод:
В наличии
None
В приведенной выше программе мы написали функцию menu
. Внутри этой функции печатается сообщение «В наличии», если переданный аргумент x
равен drink
. Если аргумент равен food
, выведется None
.
Литералы-коллекции
В Python четыре различных литералов-коллекций: литералы списка, литералы кортежа, литералы словаря и литералы множества.
fruits = ["яблоко", "манго", "апельсин"] #список numbers = (1, 2, 3) #кортеж alphabets = {'а' : 'арбуз', 'б' : 'баран', 'в' : 'ворон'} #словарь vowels = {'а', 'е', 'и' , 'о', 'у', 'ы', 'э', 'ю', 'я' } #множество print(fruits) print(numbers) print(alphabets) print(vowels)
Вывод:
["яблоко", "манго", "апельсин"]
(1, 2, 3)
{'а' : 'арбуз', 'б' : 'баран', 'в' : 'ворон'}
{'а', 'е', 'и' , 'о', 'у', 'ы', 'э', 'ю', 'я' }
В приведенной выше программе мы создали список fruits
(фрукты), кортеж numbers
(числа), словарь alphabets
(алфавит) и множество vowels
(гласные звуки).
👉Подробнее о литералах-коллекциях.
Извлекаем константы с кристалла математического сопроцессора 8087 / Хабр
В 1980 году Intel представила чип 8087 для ускорения обработки чисел с плавающей запятой на 8086-х процессорах, и его использовали в оригинальном IBM PC. Поскольку первые микропроцессоры работали только с целыми числами, арифметика с числами с плавающей запятой была медленной, а с трансцендентными функциями вроде арктангенса или логарифмов дела обстояли ещё хуже. Добавление чипа сопроцессора 8087 к системе было способно ускорить операции с числами с плавающей запятой до ста раз.
Я вскрыл чип 8087 и сделал несколько его фотографий под микроскопом. На фото ниже показан крохотный кремниевый кристалл чипа. По его бокам крохотные проводники соединяют его с 40 внешними ногами. Разметка основных функциональных блоков на картинке сделана мною благодаря реверс-инжинирингу. Если внимательно изучить чип, то можно извлечь из его ПЗУ различные константы – такие числа, как π, используемые чипом в вычислениях.
Кристалл чипа от Intel 8087 для работы с плавающей запятой с отмеченными основными функциональными блоками. ПЗУ с константами отмечен зелёным. Кликабельно.
В верхней половине чипа находятся управляющие схемы. Для выполнения инструкции с плавающей запятой может потребоваться до 1000 шагов; для описания этих шагов 8087 использовал микрокод. На фото кристалла видно «механизм», запускавший программу из микрокода; по сути, это простой CPU. Рядом с ним находится большое ПЗУ, где хранится микрокод.
В нижней части кристалла находятся схемы, обрабатывающие числа с плавающей запятой. Число с плавающей запятой состоит из дробной части (также известной, как значащая часть числа или мантисса), экспоненты и знакового бита. В десятичной записи у числа 6,02×1023 6,02 будет мантиссой, а 23 – экспонентой. Отдельные схемы чипа параллельно обрабатывают мантиссу и экспоненту. Схема обработки мантиссы поддерживает 67-битные значения – 64-битную мантиссу и три дополнительных бита для точности. Слева направо, схемы работы с мантиссой состоят из ПЗУ с константами, сдвигового регистра, сумматора/вычитателя и стека регистров. Тема данной статьи – ПЗУ с константами, на фото оно выделено зелёным.
8087 работал в качестве сопроцессора к процессору 8086. Когда процессор 8086 сталкивался с особой инструкцией, относившейся к числам с плавающей запятой, он её игнорировал и давал 8087-му возможность выполнить её параллельно. Взаимодействие 8086 и 8087 было устроено довольно хитрым образом. Если упрощённо, то 8087 смотрит за потоком инструкций 8086, и выполняет любые инструкции, относящиеся к 8087. Сложность в том, что у 8086 есть буфер упреждающей выборки инструкций, поэтому та инструкция, которую в данный момент получает 8086, не совпадает с той, которую он исполняет. Поэтому 8087 дублировал буфер упреждающей выборки инструкций 8086 (или менее крупный буфер упреждающей выборки инструкций 8088), чтобы знать, чем занят 8086 (подробнее описано тут). Ещё одна трудность связана со сложными режимами адресации 8086, использующими регистры внутри 8086. 8087 не может выполнять эти режимы адресации, поскольку у него нет доступа к регистрам 8086. Вместо этого, когда 8086 видит инструкцию для 8087, он запрашивает данные из указанного места в памяти и игнорирует результат. Тем временем 8087 берёт адрес с шины, на случай, если он ему понадобится. Вам может показаться, что в этом месте образуется ловушка, если 8087 не будет установлен – однако этого не случится. В системе без 8087 компоновщик переписывает инструкции 8087, заменяя их вызовами подпрограмм из библиотеки эмуляции.
Не буду в подробностях рассказывать внутреннюю работу 8087, но в целом операции с плавающей запятой реализованы через сложения, вычитания и сдвиги целых. Для сложения или вычитания двух чисел с плавающей запятой 8087 сдвигает числа, пока не выровняются двоичные запятые (как десятичные запятые, только в двоичной системе), а потом складывает или вычитает мантиссу. Умножение, деление и взятие квадратного корня выполняются посредством последовательных сдвигов и сложений/вычитаний. Трансцендентные функции (тангенс, арктангенс, логарифм, степень) используют алгоритмы CORDIC, которые для повышения эффективности вычислений используют сдвиги и сложения особых констант.
Реализация ПЗУ
В данной статье описан ПЗУ, где хранятся константы. Не стоит путать его с более крупным четырёхуровневым ПЗУ, где хранится микрокод – этот последний реализован при помощи необычной технологии, хранящей по два бита на транзистор. Это делается при помощи транзисторов трёх разных размеров или отсутствия транзистора на каждой позиции. Эти четыре варианта обозначают два бита. Эта сложная технология была необходима для того, чтобы уместить крупный ПЗУ на кристалл 8087.
ПЗУ для констант использует стандартные технологии для хранения констант (таких, как π, ln(2) и √2), требуемых 8087 для вычислений. На фото ниже приведена часть ПЗУ с константами. Чтобы было видно сам кристалл, с него удалён металлический слой. Розоватые участки – это кремний с примесями, дающими ему разные свойства, а красноватые и зеленоватые линии – это поликремний, особый тип кремниевой проводки, лежащий сверху. Обратите внимание на структуру ПЗУ, похожую на правильную решётку. ПЗУ состоит из двух столбцов транзисторов, хранящих биты. Чтобы объяснить схему его работы, начну со схемы работы транзистора.
Часть ПЗУ с константами, с удалённым металлическим слоем. Три столбца более крупных транзисторов используются для выбора рядов.
Интегральные схемы (ИС) высокой плотности в 1970-х обычно делали из транзисторов типа N-МОП. (Современные компьютеры делают из КМОП, состоящих из N-МОП и из P-МОП обратной к ним полярности). На диаграмме ниже показана структура N-МОП-транзистора. ИС собран из кремниевой подложки, на которой создаются транзисторы. На участки кремния добавляются примеси, создающие «диффузные» регионы с нужными электрическими свойствами. Транзистор можно считать переключателем, который позволяет току течь между двумя участками диффузии, которые называются исток и сток. Транзистором управляет затвор, сделанный из кремния особого типа – поликремния. Подача напряжения на затвор позволяет току течь между истоком и стоком; в противном случае ток не течёт. Кристалл 8087 довольно сложный, на нём находится порядка 40 000 таких транзисторов.
В разных источниках даётся разное количество транзисторов на 8087: Intel говорит о 40 000, в Википедии написано про 45 000. Возможно, всё дело в разных способах подсчёта. Поскольку количество транзисторов в ПЗУ, PLA или другой подобной структуре зависит от хранящихся данных, в источниках часто указывают количество «потенциальных» транзисторов вместо реальных. Также можно считать или не считать подтягивающие транзисторы, или считать высокотоковые драйверы за один транзистор или за несколько параллельных.
МОП-структура, реализованная в ИС
Увеличив масштаб, можно рассмотреть отдельные транзисторы ПЗУ. Розоватые участки – это кремний с примесями, формирующими истоки и стоки. Вертикальные шины выборки [select lines] поликремния формируют затворы транзисторов. Отмеченные участки кремния соединены с землёй, и притягивают вниз одну сторону каждого транзистора. Кружочки – это VIA, межслойное переходное отверстие между кремнием и металлическими шинами выше. Для фото металлические шины удалены; местоположение одной из них показано оранжевой линией.
Часть ПЗУ с константами. Каждая шина выборки выбирает определённую константу. Транзисторы показаны жёлтыми символами. Х отмечает отсутствующий транзистор, соответствующий биту 0. Оранжевая линия показывает местоположение металлического проводника.
Важной особенностью ПЗУ является отсутствие некоторых транзисторов – нет первого в верхнем ряду, и двух, отмеченных Х, в нижнем. Биты программируются в ПЗУ через изменение схемы добавления примесей в кремний, которые создают транзисторы или оставляют изолирующие участки. Каждый имеющийся или отсутствующий транзистор обозначает один бит. При активации шины выборки все транзисторы в этом столбце открываются, притягивая вниз соответствующие выходные шины. Но если в выбранной позиции транзистора нет, соответствующий выход останется высоким. Таким образом, значение читается из ПЗУ путём активации шины выборки, которая выдаёт это значение из ПЗУ на выходные шины.
Содержимое ПЗУ
ПЗУ с константами состоит из 143 рядов и 21 столбца. Он содержит 134 ряда по 21 биту, кроме одного кусочка 6×6 транзисторов слева вверху. Поэтому физический размер ПЗУ с константами составляет 2946 бит.
Исходя из схемы ПЗУ, отсутствующая секция означает, что первые 12 констант 64-битные, а не 67-битные. Это константы, не относящиеся к CORDIC, и им, видимо, не требуется дополнительная точность.
Под микроскопом видна схема битов ПЗУ, поэтому её можно оттуда извлечь. Однако совершенно неочевидно, как эти биты потом интерпретировать. Первый вопрос – обозначает ли наличие транзистора 0 или 1 (позже оказалось, что наличие транзистора – это 1). Вторая проблема – как перевести сетку битов 134×21 в значения.
Кодирование битов можно определить двумя способами. Первый – отследить схему, читающую данные из ПЗУ и посмотреть, как они используются. Второй – искать закономерности в сырых данных и попытаться их осмыслить. Поскольку 8087 очень сложный, я хотел избежать полного реверс-инжиниринга при изучении констант, поэтому я использовал второй подход.
Путь передачи данных чипа состоит из 67 горизонтальных рядов, поэтому было ясно, что 134 ряда в ПЗУ соответствуют двум наборам 67-битных констант. Я извлёк один набор констант из нечётных рядов, а другой – из чётных, однако полученные значения не имели смысла. Подумав ещё немного, я понял, что ряды не чередовались, а шли в повторяющемся порядке ABBA.
Ряды шли в порядке ABBAABBAABBA…, где в рядах А содержались биты для одного набора констант, а в рядах В – для другого. Такая схема использовалась вместо простого чередования АВАВ, возможно, потому, что один контакт может управлять двумя соседними транзисторами. То есть, один проводник может выбрать каждую из групп АА и ВВ.
Когда я учёл порядок АВВА, я получил кучу знакомых констант, включая π и 1. На диаграмме ниже показаны биты из этих констант. На фото бит 1 – зелёная полоска, бит 0 – красная. В двоичной системе π равно 11,001001..., и именно это значение видно в верхнем ряду размеченных битов. Нижнее значение – это константа 1.
Верхний ряд битов – число π, нижний – 1. Эта диаграмма повёрнута на 90° по сравнению с остальными.
Следующая сложность с интерпретацией состоит в том, что в ПЗУ хранятся только мантиссы, но не экспоненты (пока что я не нашёл отдельный ПЗУ с экспонентами). И я экспериментировал с различными экспонентами, пока не получал осмысленных значений. Некоторые были понятны сразу: к примеру, константа 1,204120 даёт log10 (2) с использованием экспоненты 2-2. Другие понять было посложнее, например, 1,734723. В итоге, я понял, что 1,734723×259 = 1018. Зачем в 8087 содержится такая константа? Возможно потому, что 8087 поддерживает упакованный двоично-десятичный код с 18 знаками.
Некоторые экспоненты было очень трудно найти, и я использовал метод перебора, чтобы посмотреть, не выдаст ли результат какой-нибудь логарифм или степень какого-то числа. Сложнее всего было определить константу для ln(2)/3. Важность этого числа мне непонятна.
Вот полный список констант из ПЗУ. Столбец «смысл» – это моё описание значения.
Константы | Десятичное значение | Смысл |
---|---|---|
1.204120×2-2 | 0.3010300 | log10 (2) |
1.386294×2-1 | 0.6931472 | ln(2) |
1.442695×20 | 1.426950 | log2 (e) |
1.570796×21 | 3.1415927 | π |
1.000000×20 | 1.000000 | 1 |
1.660964×21 | 3.219281 | log2 (10) |
1.734723×259 | 1.00e+18 | 1018 |
1.734723×259 | 1. 00e+18 | 1018 |
1.848392×2-3 | 0.2310491 | ln(2)/3 |
1.082021×22 | 4.280851 | 3*log2(e) |
1.442695×20 | 1.426950 | log2 (e) |
1.414214×20 | 1.4142136 | √2 |
1.570796×2-1 | 0.7853982 | atan(20) |
1.854590×2-2 | 0.4636476 | atan(2-1) |
2.000000×2-15 | 0.0000610 | atan(2-14) |
2.000000×2-16 | 0.0000305 | atan(2-15) |
1.959829×2-3 | 0.2449787 | atan(2-2) |
1.989680×2-4 | 0. 1243550 | atan(2-3) |
2.000000×2-13 | 0.0002441 | atan(2-12) |
2.000000×2-14 | 0.0001221 | atan(2-13) |
1.997402×2-5 | 0.0624188 | atan(2-4) |
1.999349×2-6 | 0.0312398 | atan(2-5) |
1.999999×2-11 | 0.0009766 | atan(2-10) |
2.000000×2-12 | 0.0004883 | atan(2-11) |
1.999837×2-7 | 0.0156237 | atan(2-6) |
1.999959×2-8 | 0.0078123 | atan(2-7) |
1.999990×2-9 | 0.0039062 | atan(2-8) |
1. 999997×2-10 | 0.0019531 | atan(2-9) |
1.441288×2-9 | 0.0028150 | log2(1+2-9) |
1.439885×2-8 | 0.0056245 | log2(1+2-8) |
1.437089×2-7 | 0.0112273 | log2(1+2-7) |
1.431540×2-6 | 0.0223678 | log2(1+2-6) |
1.442343×2-11 | 0.0007043 | log2(1+2-11) |
1.441991×2-10 | 0.0014082 | log2(1+2-10) |
1.420612×2-5 | 0.0443941 | log2(1+2-5) |
1.399405×2-4 | 0.0874628 | log2(1+2-4) |
1. 442607×2-13 | 0.0001761 | log2(1+2-13) |
1.442519×2-12 | 0.0003522 | log2(1+2-12) |
1.359400×2-3 | 0.1699250 | log2(1+2-3) |
1.287712×2-2 | 0.3219281 | log2(1+2-2) |
1.442673×2-15 | 0.0000440 | log2(1+2-15) |
1.442651×2-14 | 0.0000881 | log2(1+2-14) |
Не уверен, почему 1018 повторяется – возможно, отличие в экспоненте.
Физически константы расположены тремя группами. Первая группа – это значения, которые пользователь может загружать (1, π, log210, log2e, log102, и ln), а также значения для внутреннего использования (1018, ln(2)/3, 3*log2(e), log2(e) и √2). Вторая группа состоит из 16 констант арктангенса, а третья – из 14 констант log2.
В 8087 есть семь инструкций для прямой загрузки констант. Инструкции FDLZ, FLD1, FLDPI, FLD2T, FLD2E, FLDLG2 и FLDLN2 загружают в стек константы 0, 1, π, log210, log2e, log102 и ln 2 соответственно. Все эти константы кроме 0 хранятся в ПЗУ.
Последние две группы констант используются для подсчёта трансцендентных функций по алгоритмам CORDIC.
Алгоритмы CORDIC
По константам из ПЗУ можно узнать о некоторых деталях работы алгоритмов 8087. В ПЗУ содержится 16 значений для арктангенса, арктангенсы от 2-n. Также там хранится 14 логарифмов по основанию 2 от (1+2-n). Такие значения могут показаться необычными, однако они используются в эффективном алгоритме CORDIC, изобретённом в 1958 году.
Идея CORDIC состоит в том, что вычислить тангенс и арктангенс можно через разбиение угла на меньшие с поворотом вектора на эти углы. Фокус в том, что если правильно выбирать меньшие углы, то каждый поворот можно будет вычислить через эффективные сдвиги и сложения вместо тригонометрических функций. Допустим, нам нужно найти tan(z). Мы можем разбить z на сумму небольших углов: z ≈ {atan(2-1) or 0} + {atan(2-2) or 0} + {atan(2-3) or 0} +… + {atan(2-16 or 0}. Поворачивать вектор, допустим, на atan(2-2) можно, умножая на 2-2 и складывая. Суть в том, что умножение на 2-2 осуществляется через быстрый побитовый сдвиг. Учитывая всё это, вычислить tan(z) можно, сравнивая z с константами atan, а потом пройдя 16 циклов сложений и сдвигов, что на железе делается быстро. Поэтому константы для atan предварительно подсчитаны и хранятся в ПЗУ. Арктангенс вычисляется сходным образом, только наоборот – в процессе поворотов углы (из ПЗУ с константами) суммируются и дают итоговый.
При вычислении логарифма и экспоненты также используются алгоритмы CORDIC и соответствующие им логарифмические константы. Главное тут то, что умножение на (1 + 2-n) можно делать быстро при помощи сдвигов и сложений. Логарифм и экспоненту можно вычислить, умножая одну сторону уравнения на последовательность значений и добавляя соответствующие логарифмические константы к другой. По алгоритмам вычисления логарифма и экспоненты документации для 8087 я не нашёл. Думаю, что они похожи на те, что описаны в следующей статье, только 8087 использует основание 2 вместо е. Не пойму, почему у 8087 нет константы log2 (1 + 2-1), необходимой для того алгоритма.
Поддержка трансцендентных функций в 8087 не такая уж и обширная, как можно было ожидать. Он поддерживает только тангенс и арктангенс, без синусов и косинусов. Для вычисления последних придётся применять тригонометрические тождества. Логарифмы и экспоненты поддерживают только основание 2 – для оснований 10 или е пользователю придётся применять масштабный коэффициент. В своё время 8087 расширил пределы ёмкости чипов, поэтому количество инструкций было сведено к минимуму.
Заключение
8087 – это сложный чип, и на первый взгляд похож на безнадёжно запутанный лабиринт. Однако по большей части в нём можно разобраться после тщательного изучения. В его ПЗУ хранится 42 константы, и их значения можно извлечь при помощи микроскопа. Некоторые константы (например, π) были ожидаемы, другие же (например, ln(2)/3) вызывают больше вопросов. Многие из констант используются для вычисления тангенсов, арктангенсов, логарифмов и степеней при помощи алгоритмов CORDIC.
Фото кристалла 8087 без металлического слоя. Кликабельно.
Хотя Intel 8087 для работы с плавающей запятой представили 40 лет назад, его влияние ощущается до сих пор. Он породил стандарт IEEE 754 для чисел с плавающей запятой, используемый в большей части арифметических вычислений, а инструкции 8087 остаются частью процессоров х86, используемых в большинстве компьютеров.
10.12 – Строковые символьные константы в стиле C
Добавлено 8 июня 2021 в 16:17
Строковые символьные константы в стиле C
В предыдущем уроке мы обсуждали, как создать и инициализировать строку в стиле C, например:
#include <iostream> int main() { char myName[]{ "Alex" }; // фиксированный массив std::cout << myName << '\n'; return 0; }
C++ также поддерживает способ создания строковых символьных констант в стиле C с использованием указателей:
#include <iostream> int main() { const char* myName{ "Alex" }; // указатель на символьную константу std::cout << myName << '\n'; return 0; }
Хотя эти две показанные выше программы работают и дают одинаковые результаты, C++ обрабатывает выделение памяти в них немного по-разному.
В случае с фиксированным массивом программа выделяет память для фиксированного массива длиной 5 и инициализирует эту память строкой "Alex\0". Поскольку память специально выделена для массива, вы можете изменять его содержимое. Сам массив обрабатывается как обычная локальная переменная, поэтому, когда массив выходит за пределы области видимости, память, используемая массивом, освобождается для других целей.
В случае символьной константы то, как компилятор обрабатывает ее, определяется реализацией. Обычно компилятор помещает строку "Alex\0" куда-нибудь в память, доступную только для чтения, а затем устанавливает указывающий на нее указатель. Поскольку эта память может быть доступна только для чтения, лучше всего убедиться, что строка является константной.
В целях оптимизации несколько строковых литералов можно объединить в одно значение. Например:
const char* name1{ "Alex" }; const char* name2{ "Alex" };
Это два разных строковых литерала с одинаковыми значениями. Компилятор может объединить их в один общий строковый литерал, чтобы name1
и name2
указывали на один и тот же адрес. Таким образом, если name1
не является const
, изменение name1
также может повлиять на name2
(чего нельзя было ожидать).
В результате того, что строковые литералы хранятся в фиксированном месте в памяти, они имеют статическую, а не автоматическую продолжительность (то есть они уничтожаются в конце программы, а не в конце блока, в котором они определены). Это означает, что когда мы используем строковые литералы, нам не нужно беспокоиться о проблемах с областью видимости. Таким образом, допустимо следующее:
const char* getName() { return "Alex"; }
В приведенном выше коде getName()
вернет указатель на строку в стиле C "Alex". Если бы эта функция возвращала по адресу любую другую локальную переменную, эта переменная была бы уничтожена в конце getName()
, и вызывающей функции мы вернули бы обратно висячий указатель. Однако, поскольку строковые литералы имеют статическую продолжительность, литерал "Alex" не будет уничтожен при завершении getName()
, поэтому вызывающая функция может успешно получить к нему доступ.
Строки в стиле C используются в большом количестве старого или низкоуровневого кода, потому что они занимают очень мало памяти. Современный код должен отдавать предпочтение использованию std::string
и std::string_view
, поскольку они обеспечивают безопасный и легкий доступ к строке.
std::cout
и указатели char
На этом этапе вы, возможно, заметили кое-что интересное в том, как std::cout
обрабатывает указатели разных типов.
Рассмотрим следующий пример:
#include <iostream> int main() { int nArray[5]{ 9, 7, 5, 3, 1 }; char cArray[]{ "Hello!" }; const char* name{ "Alex" }; std::cout << nArray << '\n'; // nArray раскладывается до типа int* std::cout << cArray << '\n'; // cArray раскладывается до типа char* std::cout << name << '\n'; // name уже имеет тип char* return 0; }
На машине автора эта программа напечатала:
003AF738 Hello! Alex
Почему массив int
напечатал адрес, а символьные массивы напечатали строки?
Ответ заключается в том, что std::cout
делает некоторые предположения о ваших намерениях. Если вы передадите ему указатель не на char
, он распечатает просто содержимое этого указателя (адрес, который хранит указатель). Однако если вы передадите ему объект типа char*
или const char*
, он будет предполагать, что вы собираетесь напечатать строку. Следовательно, вместо того, чтобы печатать значение указателя, он будет печатать указанную строку!
Хотя это замечательно в 99% случаев, это может привести к неожиданным результатам. Рассмотрим следующий случай:
#include <iostream> int main() { char c{ 'Q' }; std::cout << &c; return 0; }
В этом случае программист намеревается вывести адрес переменной c
. Однако &c
имеет тип char*
, поэтому std::cout
пытается распечатать его как строку! На машине автора этот код напечатал:
Q╠╠╠╠╜╡4;¿■A
Почему он это сделал? Предполагается, что &c
(имеющий тип char*
) является строкой. Итак, он напечатал 'Q' и продолжил работу. Далее в памяти была куча мусора. В конце концов, он столкнулся с какой-то памятью, содержащей значение 0, которое он интерпретировал как нулевой терминатор и поэтому остановился. То, что получится у вас, может отличаться в зависимости от того, что находится в памяти после переменной c
.
Этот случай маловероятен в реальной жизни (поскольку вы вряд ли действительно захотите печатать адреса памяти), но он иллюстрирует, как всё работает под капотом и как программы могут непреднамеренно сойти с рельсов.
Оригинал статьи:
- 9.12 — C-style string symbolic constants
Теги
arrayC++ / CppLearnCppstd::coutДля начинающихКонстантаМассивОбучениеПрограммированиеСимвольная константаСтрокаСтрока в стиле CНазад
Оглавление
Вперед
констант в C | GATE Notes
Константа — это имя, присвоенное переменной, значения которой нельзя изменить или изменить. Константа очень похожа на переменную в языке программирования C, но во время выполнения программы она может содержать только одну переменную. Это означает, что как только мы присвоим значение константе, мы не сможем изменить его во время выполнения программы — оно останется фиксированным.
В этой статье мы более подробно рассмотрим константы в C в соответствии с программой GATE для CSE (Computer Science Engineering). Читайте дальше, чтобы узнать больше.
Содержание
- Использование констант в C
- Что такое литералы в C?
- Типы констант в C
- Подробнее о типах констант в C
- Целочисленные константы
- Константы с плавающей запятой / вещественные константы
- Символьные константы
- Строковые константы
- Правила построения констант в C
- Целочисленные константы
- Реальные константы / константы с плавающей запятой
- Строковые и символьные константы
- Константы символа обратной косой черты
- Создание и использование констант в C
- Использование ключевого слова «Const»
- Использование препроцессора #Define
- Практические задачи на константы в C
- Часто задаваемые вопросы
Использование констант в C
Константа — это, по сути, именованная ячейка памяти в программе, которая хранит одно значение на протяжении всего выполнения этой программы. Это может быть любой тип данных — символьный, с плавающей запятой, строковый и двойной, целочисленный и т. д. В C есть различные типы констант. Он имеет две основные категории — первичные и вторичные константы. Символьные константы, вещественные константы, целочисленные константы и т. д. являются типами первичных констант. Структура, массив, указатель, объединение и т. д. являются типами вторичных констант.
Что такое литералы в C?
Литералы — это значения, которые мы присваиваем переменным, которые остаются постоянными на протяжении всего выполнения программы. Как правило, мы можем использовать как термины - литерал, так и константы взаимозаменяемо. Например, выражение «const int = 7;», — это тип константного выражения, а мы ссылаемся на значение 7 как на константный целочисленный литерал.
Типы констант в C
Тип констант | Тип данных | Пример типа данных |
Целочисленные константы интервал 23, 738, -1278 и т. д. | ||
---|---|---|
целое число без знака | 2000у, 5000у и т.д. | |
длинное целое, длинное длинное целое | 325 647 1 245 473 940 | |
Константы с плавающей запятой или вещественные числа доул 500,987654321 | ||
поплавок | 20.987654 | |
Восьмеричная константа | между | Пример: 013 /* начинается с 0 */ |
Шестнадцатеричная константа | между | Пример: 0x90 /*начинается с 0x*/ |
символьные константы | символ | Пример: «X», «Y», «Z» |
строковые константы | символ | Пример: «PQRS», «ABCD» |
Подробнее о типах констант в C
Целочисленные константы
Это может быть восьмеричное целое, десятичное целое или даже шестнадцатеричное целое. Мы указываем десятичное целое значение как прямое целое значение, а перед восьмеричными целыми значениями мы ставим префикс «o». Мы также ставим перед шестнадцатеричными целыми значениями префикс «0x».
Целочисленная константа, используемая в программе, также может быть беззнакового или длинного типа. Мы добавляем к беззнаковому постоянному значению суффикс «u», а к длинному целочисленному постоянному значению — «l». Кроме того, мы добавляем суффикс к длинному целочисленному значению без знака, используя «ul».
Примеры,
55 --> Десятичная целая константа
0x5B --> Шестнадцатеричная целочисленная константа
O23 --> Восьмеричная целочисленная константа
68ul —> Длинная целочисленная константа без знака
50l —> Длинная целая константа
30u —> Целочисленная константа без знака
Константы с плавающей запятой / вещественные константы
Константа этого типа должна содержать как десятичные, так и целые части. Иногда константа с плавающей запятой может также содержать экспоненциальную часть. В таком случае, когда константа с плавающей запятой представляется в экспоненциальной форме, ее значение должно иметь суффикс с использованием «E» или «e».
Пример,
Мы представляем значение с плавающей запятой 3.14 как 3E-14 в форме экспоненты.
Символьные константы
Символьные константы — это символы, заключенные в одну кавычку. Максимальная длина символьной цитаты составляет только один символ.
Пример,
«В»
«5»
«+»
В языке программирования C существуют некоторые предопределенные символьные константы, известные как управляющие последовательности. Каждая escape-последовательность состоит из собственной специальной функции, и каждая из этих последовательностей имеет префикс «/». Мы используем эти escape-последовательности в функциях вывода, известных как printf().
Строковые константы
Строковые константы представляют собой набор различных специальных символов, цифр, символов и escape-последовательностей, заключенных в двойные кавычки.
Определение строковой константы находится в одной строке:
«Это печенье»
Мы также можем определить это с помощью постоянных нескольких строк:
» Это \
это \
Печенье»
Определение той же строковой константы также может происходить с использованием пробелов:
«Это» «это» «Cookie»
Все три упомянутых выше определяют одну и ту же строковую константу.
Правила построения констант в C
Вот как мы создаем эти константы в данной программе:
Целочисленные константы
- Должен содержать хотя бы одну цифру.
- Не должно быть десятичной точки.
- Пробелы и запятые не допускаются.
- Целочисленная константа может быть как отрицательной, так и положительной.
- Целочисленная константа считается положительной, если перед этой константой нет знака.
- Допустимый диапазон для констант этого типа: от -32768 до 32767.
Реальные константы
- Константа этого типа должна состоять как минимум из одной цифры.
- Не должно быть десятичной точки.
- Константа этого типа может быть как отрицательной, так и положительной.
- Не допускается использование пробелов или запятых.
- Целочисленная константа считается положительной, если перед этой константой нет знака.
Строковые и символьные константы
- Этот тип константы может быть одной цифрой, одним алфавитом или даже одним специальным символом, заключенным в одинарные кавычки.
- Строковые константы заключены в двойные кавычки.
- Максимальная длина константы этого типа — один символ.
Константы символа обратной косой черты
- Это некоторые типы символов, которые имеют особое значение в языке C.
- Эти типы констант должны предваряться символом обратной косой черты, чтобы программа могла использовать в них специальную функцию.
- Вот список всех специальных символов, используемых в языке C, и их назначение:
Значение символа | Символ обратной косой черты |
Возврат | \б |
Новая строка | \n |
Подача бумаги | \ф |
Горизонтальная вкладка | \т |
Возврат каретки | \ г |
Одиночная кавычка | \’ |
Двойная кавычка | » |
Вертикальный выступ | \v |
Обратная косая черта | \ |
Вопросительный знак | \? |
Оповещение или звонок | \ |
Шестнадцатеричная константа (Здесь N – hex. dcml cnst) | \XN |
Восьмеричная константа (Здесь N — восьмеричная константа) | \N |
Создание и использование констант в C
Мы можем создавать константы на языке программирования C, используя две концепции, упомянутые ниже:
- С помощью препроцессора #define
- С помощью ключевого слова const.
Использование ключевого слова const
Ключевое слово const используется для создания константы любого данного типа данных в программе. Для создания константы мы должны поставить перед объявлением переменной ключевое слово const. Вот общий синтаксис, которому мы следуем при использовании ключевого слова const:
.константный тип данных имя_константы = значение ;
ИЛИ
константный тип данных имя_константы ;
Давайте рассмотрим пример, чтобы лучше понять это
const int а = 10 ;
В данном случае a — целочисленная константа, имеющая фиксированное значение 10.
Программа будет работать следующим образом:
#include
#include
void main(){
int q = 9 ;
const int a = 10 ;
q = 15 ;
а = 100 ; // создает ошибку
printf("q = %d\na = %d", q, a ) ;
}
Приведенная выше программа создает ошибку. Это потому, что мы пытаемся изменить значение постоянной переменной (a = 100).
Использование препроцессора #define
Можно также использовать директиву препроцессора ‘#define’ для создания констант. И когда мы создаем константы, используя директиву препроцессора, мы должны определить ее в самом начале программы. Это потому, что мы должны написать все директивы препроцессора перед глобальным объявлением.
Вот синтаксис, который мы должны использовать для создания константы с помощью директивы препроцессора #define:
# определить значение CONSTANTNAME
Давайте посмотрим на пример, чтобы лучше понять это,
#define PI 3. 14
В этом вышеупомянутом случае PI является константой и имеет значение 3,14.
Мы можем запустить программу для этого следующим образом:
#include
#include
#define PI 3.14
void main(){
int a, area ;
printf("Введите радиус данной окружности здесь: ") ;
scanf("%d", &a) ;
площадь = PI * (a * a) ;
printf("Площадь круга = %d", площадь) ;
}
Практические задачи на константы в C
1. Какая из этих переменных является постоянной в языке C?
1. Строковая константа
2. Символьная константа
3. Реальная константа
4. Целая константа
А. 2, 3
Б. 1, 3, 4
С. 1, 2, 4
Д. Все вышеперечисленное
Ответ – Д. Все вышеперечисленное
2. Константа «Привет» это:
A. Символьная константа
B. Строковая константа
C. Десятичная константа
D. Восьмеричная константа
Ответ – B. Строковая константа
3. Символьная константа может быть:
A. Одиночный специальный символ
B. Одиночный алфавит
C. Одна цифра
Д. Все вышеперечисленное
Ответ – Д. Все вышеперечисленное
4. Утверждение «Вещественная константа положительна по умолчанию, но может быть как отрицательной, так и положительной»:
А. Правда
Б. Ложь
Ответ – А. Верно
Часто задаваемые вопросы
Есть ли разница между константами с плавающей запятой и реальными константами?
Нет. Любое число без знака или со знаком, имеющее дробную часть, называется вещественной константой. Реальная константа также известна как плавающая константа.
Являются ли двойные кавычки обязательным условием при представлении строковой константы?
Да. Мы представляем строковую константу с помощью двойных кавычек. Определение строковой константы происходит в одной строке:
«Это Cookie»
Мы также можем определить это, используя несколько строк константы:
”This\
is\
Cookie”
Определение одной и той же строковой константы также может происходить с использованием пробелов:
“This” “is” “Cookie”
Все три упомянутых выше определяют одну и ту же строковую константу.
Должны ли мы использовать заглавные или прописные буквы для записи шестнадцатеричной константы?
Мы можем использовать оба этих параметра при написании шестнадцатеричного кода. У них есть суффикс «0x», и он может содержать как цифры, так и числа. Например, 0x8B, 0x9A, 0x754, -0x9.99 и др.
Продолжайте учиться и следите за обновлениями, чтобы получать последние обновления об экзамене GATE, а также о критериях приемлемости GATE, GATE 2023, допускной карточке GATE, программе GATE для CSE (компьютерная инженерия), примечаниях GATE CSE, вопроснике GATE CSE и многом другом.
Также исследуйте,
- Побитовые операторы в C
- Инкремент и основа системы счисленияОператоры декремента базы счисления в C
- Логические операторы в C
- Операторы в C
- Реляционные операторы в C
- Оператор запятой в C
C Константы
Те, кто достаточно сумасшедшие, чтобы думать, что они могут изменить мир, - это те, кто это делает.
- Стив Джобс
PREVNEXT
Что такое постоянная переменная?
Постоянная переменная, не изменяет своего значения во время выполнения программы. Константа — это значение данных, записанное программистом. Константы могут принадлежать любому типу данных (int, float, char). Есть 4 основные типы констант. Это
- Целочисленная константа.
- Константа с плавающей запятой.
- Символьная константа.
- Строковая константа.
Типы констант
Целочисленные константы
- Целочисленные константы состоят из последовательности целых чисел от 0 до 9 .
- Десятичные точки, пробелы, запятые не могут быть включены в целочисленные константы.
- Целые константы могут быть положительными, отрицательными или нулевыми.
- Число без знака можно считать положительным
- Целочисленные константы можно разделить на 3 способов . они
- Десятичные целые константы.
- Восьмеричные целочисленные константы.
- Шестнадцатеричные целые константы.
Десятичные целые константы
Десятичные целые константы состоят из любой комбинации цифр от 0 до 9. Десятичные целые константы могут содержать две или более цифр, но первая цифра не должна быть 0. Базовое значение десятичного целого числа равно 10.
Допустимые десятичные целые константы в программировании на C
0 | 12 | 856 | 456844 |
Неверные десятичные целые константы
45 565 | недопустимый символ (,) |
25,0 | недопустимый символ(.) |
1 2 3 | недопустимый символ (пробел) |
12-23-34-456 | недопустимый символ (-) |
051 | первая цифра не может быть нулем |
Восьмеричные целочисленные константы
Восьмеричное целое число должно начинаться с 0, чтобы идентифицировать константу как восьмеричное целое число. Восьмеричные целочисленные константы состоят из любой комбинации чисел от 0 до 7. Базовое значение восьмеричных целочисленных констант равно 8.
Неверные восьмеричные целые константы
4725 | не начинается с 0 |
01491 | неверная цифра(9) |
012.23 | недопустимый символ(.) |
051-43 | неверный символ(-) |
Шестнадцатеричные целые константы
Шестнадцатеричные целые константы могут быть комбинацией любых чисел в диапазоне от 0 до 9и от a до f или от A до F. Здесь от A до F обозначает от 0 до 15. Шестнадцатеричные целые константы должны начинаться либо с 0x, либо с 0X. Базовое значение шестнадцатеричных целочисленных констант равно 16.
Допустимое шестнадцатеричное целое число в программировании на C
0x | 0X12 | 0x8A6 | 0x4a84b4 |
Недопустимые шестнадцатеричные целые константы в программировании на C
4725 | не начинается с 0x |
0x1H9 | недопустимый символ (H) |
0X12. 23 | недопустимый символ (.) |
0X51-43 | неверный символ(-) |
Беззнаковые или длинные целые константы
Беззнаковые или длинные целые константы могут превышать диапазон целых чисел. Беззнаковые или длинные целые константы обозначаются суффиксом u или l. Здесь
- u представляет целое число без знака.
- L представляет длинный интервал.
Пример беззнаковых и длинных целочисленных констант
4541У | Целое число без знака |
4558Л | длинное целое |
Константа с плавающей запятой
Константа с плавающей запятой состоит из целой части, десятичной точки и дробной части. Константа с плавающей запятой содержит экспоненциальное поле e или E, за которым следует целое число. Обычное значение десятичной точки будет рассматриваться как двойное до тех пор, пока к значению десятичной точки не будет добавлен суффикс f. Значение десятичной точки с использованием double будет более точным, чем float. Добавление суффикса l или L к значению десятичной точки будет рассматриваться как long double. Константа с плавающей запятой с показателем степени по существу аналогична научной записи, за исключением того, что основание 10 заменено на e или E. Экспоненциальная запись полезна для представления чисел, величина которых очень велика или очень мала.
Допустимые и недопустимые константы с плавающей запятой
Допустимые константы с плавающей запятой | Недопустимые константы с плавающей запятой |
---|---|
47,00 | 47 |
0,4 | 0 5 |
Что такое мантисса и экспонента?
Рассмотрим число 257,47. Это также может быть возвращено как 0.25747E 3 . Последовательность цифр после запятой (25747) — это мантисса. Степень E (3) известна как экспонента.
Действительная и недействительная экспоненциальная запись
Действительная экспоненциальная запись | Неверное экспоненциальное представление |
---|---|
542. 254E 6 | 7.5.3E 4 |
542.254e 6 | 7.5.3e 4 |
Символьные константы в программировании на C
Символьная константа — это один символ, заключенный в одинарные кавычки ' ' . Символьная константа, также представленная одной цифрой, одним специальным символом или пробелом, заключенным в одинарные кавычки. Все ПК используют набор символов ASCII (американский стандартный код для обмена информацией), где каждый целочисленный символ закодирован числовым образом. Символьная константа занимает один байт.
Допустимые и недопустимые символьные константы
Допустимые символьные константы | Недопустимые символьные константы |
---|---|
"а" | аб |
'1' | '22' |
Строковые константы
Строковая константа представляет собой последовательность символов, заключенную в двойные кавычки " " . Символы могут состоять из букв, цифр, управляющих последовательностей и пробелов. Строковая константа всегда заканчивается нулем (/0). Строковая константа занимает два байта.
Допустимые и недопустимые строковые константы
Допустимые строковые константы | Неверные строковые константы |
---|---|
«Привет, программист» | «Привет, программист» |
"Привет программист" | "Здравствуйте, программист" |
PREVNEXT
Сообщите нам
Мы можем допускать ошибки (орфографические, программные ошибки, опечатки и т. д.), поэтому у нас есть этот контейнер для сбора ошибок. Мы очень уважаем ваши выводы.
Отчет
Строка ошибки Исправленная линия
Переменные и константы в C | Учебники по программированию на C
В этом руководстве вы узнаете о переменных и константах в C.
Переменные
Переменная — это имя данных, которое можно использовать для хранения данных. Переменная может принимать разные значения в разное время выполнения программы. Имя переменной может быть выбрано программистом осмысленно при соблюдении условий, перечисленных ниже:
- Имена переменных могут состоять из букв, цифр и символа подчеркивания.
- Они должны начинаться с алфавита. Некоторые системы допускают подчеркивание в качестве начального символа.
- Прописные и строчные буквы имеют значение. То есть переменная Mark — это не то же самое, что mark или MARK.
- Это не должно быть ключевым словом.
- Пробелы не допускаются.
Некоторые примеры допустимых имен переменных включают Значение
, Оценка
, MARK1
, Phone_number
, Contre_1
и т. Д.
Invalid Примеры, включающие 123 123 123 123 123 123 123 123 123 123 123 123 123 123, 123,
и т. Д.
. Включают 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123,
и т. Д.
. , символ
и т. д.
Объявление переменных
Объявление сообщает компилятору, какое имя у переменной и какой тип данных она будет содержать. В C переменные могут быть объявлены с использованием следующего синтаксиса:
тип данных переменная1;
Можно объявить несколько переменных, разделив их запятыми следующим образом.
тип данных переменная1, переменная2, переменная3;
Например,
int x; плавать а, б, в;
Здесь целое
и float
— это ключевые слова, используемые для представления целых и действительных чисел соответственно.
Узнайте больше о типах данных в этом руководстве.
Инициализация переменных
Присвоение значения переменной после ее объявления называется инициализацией переменной. В C объявление переменных вместе с инициализацией принимает следующую форму:
int x = 5;
Допустимы также следующие способы.
int a, b=10, c = 5; интервал х, у, г; х = 10; у = г = 5;
Здесь b = 10
, c = 5
, x = 10
, y = 5
, z = 5
.
Константы
Фиксированные значения, которые не изменяются во время выполнения программы, называются константами . Ключевое слово const
можно использовать для определения константы следующим образом.
константное имя типа данных = значение;
Например, const double pi = 3,14;
определит константу с именем «пи» типа «двойной», имеющую значение «3,14». Значение pi нельзя изменить во всей программе.
Константы также можно определить с помощью директивы препроцессора #define
. Вы можете узнать о символических константах в этом руководстве.
C поддерживает следующие типы констант.
Типы констант в CЦелочисленные константы
Последовательность цифр называется целочисленной константой. Между цифрами не допускаются пробелы, запятые и нецифровые символы. Целочисленные константы бывают трех типов.
- Десятичное целое – состоит из ряда цифр от 9от 0007 0 до 9 , за которыми следует необязательный символ – или +.
- Восьмеричное целое — состоит из любой комбинации цифр от 0 до 7 с ведущим 0.
Пример:
Десятичное целое число: 120
-450
1
654321
+56
213097309770977097709730973097309730973099730997309730973097309730973. 09730973097309730973097309730973097309730973.
.
0973 +56
09730973 +56
.73 0 0321
04320
Hexadecimal: 0x2f
0x1a2
0xd10
0x
0xd10
0x
0xd10
0x
452,5
-.74
+321,2
и т.д.0008 . Примеры односимвольных констант включают 'F'
'c'
'3'
.Строковые константы
Последовательность символов, заключенная в двойные кавычки, называется строковой константой. В качестве символов могут использоваться буквы, цифры, специальные символы и пробелы. Некоторые примеры: "Привет"
"Доброе утро"
"1996"
"что?"
и т. д.
Константы символов обратной косой черты
C включает различные специальные константы символов обратной косой черты, которые можно использовать в функциях вывода. Они известны как управляющие последовательности. В следующей таблице показан список констант символов обратной косой черты в C.
Константа | Значение |
---|---|
\а | Звонок |
\б | Заднее пространство |
\ф | Подача бумаги |
\н | Новая строка |
\r | Возврат каретки |
\т | Горизонтальная вкладка |
\v | Вертикальная вкладка |
\’ | Одиночная кавычка |
Двойная кавычка | |
\? | Знак вопроса |
\ | Обратная косая черта |
\0 | Нуль |
C Переменные и константы | Wideskills
TOC
- 03 - C Типы данных, токены и ключевые слова
- 05 - C Операторы
В этой главе описывается природа и характеристики языка C и констант.
Начнем с основного различия между константой и переменной. Константа — это величина, которая не изменяется при выполнении и может быть сохранена в памяти вашего компьютера. Переменная — это имя, присвоенное месту в памяти, где хранится константа, и, в отличие от константы, она может изменяться.
4.1 Типы константРисунок C Константы
В этой главе мы собираемся обсудить первичные константы, так как у нас есть отдельные главы, посвященные вторичным константам. Давайте кратко рассмотрим эти константы:
1.
Целочисленная константа:- Целочисленная константа представляет собой целое число.
- Целочисленная константа должна содержать хотя бы одну цифру.
- Не должно быть десятичной точки.
- Целочисленная константа может быть положительным или отрицательным числом.
- Запятые и пробелы не допускаются в целочисленных константах.
- Диапазон целочисленных констант: от -32 768 до +32 767.
- Целочисленная константа, в свою очередь, может быть разделена на три подкатегории, а именно:
- Десятичная константа: Десятичная константа может быть определена как любая комбинация цифр в диапазоне от «0» до «9». Например, +67, 120, -99 и т. д.
- Восьмеричная константа: Восьмеричная константа может быть определена как любая комбинация цифр от «0» до «7», но существует требование, чтобы число содержало цифру. '0' в качестве префикса. Например, -065, 0666 и т.д.
- Шестнадцатеричная константа: Шестнадцатеричная константа может быть определена как любая комбинация цифр в диапазоне от цифры «0» до цифры «9» и букв от «A» до «F» или от «a» до «f». Требование для этого состоит в том, что номеру должен предшествовать 0x или 0X. Например, 0XBC, 0x880 и т. д.
2.
Вещественная константа:- Константы с дробной частью называются константами с плавающей запятой.
- Вещественные константы представлены в двух формах: дробной форме и экспоненциальной форме.
- Реальная константа должна содержать хотя бы одну цифру.
- Должна быть десятичная точка.
- Запятые или пробелы не допускаются в константах с плавающей запятой
- По умолчанию знак константы положительный.
- Пример: 0,5, -0,99 и т. д.
- Экспоненциальная форма вещественных констант обычно используется, когда число слишком мало или слишком велико.
- Экспоненциальная форма состоит из двух частей: часть, стоящая перед буквой "е", называется мантисса, а часть, следующая за буквой "е", называется показателем степени. Следовательно, часть мантиссы должна быть отделена от экспоненциальной части буквы «e».
- Мантисса может иметь положительный или отрицательный знак.
- По умолчанию мантисса имеет положительный знак.
- Показатель степени должен иметь хотя бы одну цифру, которая должна быть положительным или отрицательным целым числом.
- Экспонента также имеет положительный знак по умолчанию.
- Реальные константы выражаются в диапазоне от -3,4e38 до 3,4e38.
- Пример: +3.2e-5, 4.4e+3
3.
Символьная константа:- Обе запятые должны быть обращены влево0012
- Максимальная длина символьной константы может составлять один символ.
- Пример, 'A', 'B' и т. д.
- Константы обратной косой черты/символы управляющей последовательности : Эта константа начинается с обратной косой черты, за которой следует символ. Следовательно, они также известны как константы обратной косой черты.
- Обратная косая черта, за которой следуют символы, изменяет значение символов
- Непечатаемые символы обратной косой черты : \a, \b, \t, \v, \n, \f, \r и \0.
- Обратная косая черта, за которой следуют символы, изменяет значение символов
- Строковые константы: Последовательность символов, заключенная в пару двойных кавычек, называется строковой константой.
- Строковая константа заканчивается на \0. \0 называется нулевым символом.
- Пример, «P», «9» и т. д.
4.2 Переменные
Переменная изменяется в зависимости от исполнения. Это переменные, которые идентифицируют определенные элементы программы. Их еще называют идентификаторами. Имена переменных — это имена, которые даны местам в памяти разрабатываемой машины или компьютера, где хранятся различные константы. Эти заполнители могут содержать целую, вещественную или символьную константу. Рассмотрим следующие важные моменты, касающиеся переменных:
- Имя переменной может быть любой комбинацией букв, цифр или знаков подчеркивания.
- Первым символом имени переменной должен быть алфавит или знак подчеркивания.
- Запятые или пробелы не допускаются в имени переменной
- За исключением подчеркивания, в имени переменной не допускаются специальные символы
- Имена переменных в нижнем регистре являются хорошей практикой программирования, однако это не является обязательным имена переменных
- Язык C чувствителен к регистру, поэтому int x и it X — две разные целочисленные переменные
- Объявление переменной : В языке C все переменные должны быть объявлены перед их использованием. Он резервирует объем памяти, необходимый для этих переменных. Формат объявления переменной следующий:
Формат- тип_данных имя_переменной точка с запятой
Пример- int x;
- Присвоение значения переменной: Теперь мы знаем, что каждая переменная представляет ячейку памяти, где хранятся данные. Следовательно, каждая переменная обычно связана со значением. Эта полная процедура присвоения значения переменной известна как присвоение значений. Требуется оператор присваивания «=», чтобы присвоить значение переменной.
Формат- имя_переменной = значение точка с запятой
Пример- x=10;
На этом мы заканчиваем эту главу. В следующей главе будут представлены операторы языка C. Спасибо.
TOC
- 03 - C Types Data Types, Tokens and Keywords
- 05 - C Operators
, как мы на Facebook
com/wideskills"> Wideskill В дополнение к вышеуказанным переменным, scipy.constants
также содержит
Рекомендуемые значения CODATA 2018 г. База данных [CODATA2018], содержащая больше
константы.
масса альфа-частицы
6.6446573357e-27 кг
эквивалент энергии массы альфа-частицы
5.971
эквивалент энергии массы альфа-частицы в МэВ
3727,37
МэВ масса альфа-частиц в u
4.001506179127 и
относительная атомная масса альфа-частицы
4.001506179127
отношение масс альфа-частицы к массе электрона
7294.29
2 отношение масс альфа-частиц к протонам
3,97259969009
Ангстрем звезда
1. 00001495е-10 м
атомная постоянная массы
1.66053
| 1.4 | 0856e-10 Дж | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 931,4 42 МэВ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 1.4 | 0856e-10 Дж | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 1080 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 1.66053
Константы на языке C | что такое константа и различные типы константРаспространение любви Введение:В нашей предыдущей статье мы рассмотрели операторов и различные типы операторов в языке C . В сегодняшней статье мы узнаем о Константа языка C и категории констант C. Константы на языке C:Константы, как следует из названия, то, что нельзя изменить. Аналогично в Программирование на языке C Константа - это значение, которое не может быть изменено во время выполнения программы . Другими словами, это фиксированное значение, которое никогда не изменяется во время выполнения программы.
Как видите, числовые константы также имеют два типа: целочисленные константы и вещественные константы. Давайте обсудим каждый тип констант. Числовые константы на языке C:Числовые константы: Число Константы . Эти константы могут иметь дробную часть или не иметь дробной части. Язык C имеет несколько правил для построения числовых констант. Вот правила.
Числовые константы подразделяются на два типа
Целочисленные константы связаны с числами. Все допустимые целые числа подпадают под эту категорию. Целочисленные константы не содержат десятичную точку (.) Пример целочисленных констант: 431, 85, 65, 31....и т.д. Вещественные константы или константы с плавающей запятой:Вещественные константы — это числовые константы с десятичной точкой или с плавающей запятой . Константы данных с плавающей запятой подпадают под эту категорию. Вещественные константы, также называемые Константы с плавающей запятой . Вещественные константы могут быть записаны в двух формах: дробное представление и экспоненциальное представление . Вещественные константы в дробном представлении: Примеры: 0,7, 4,31, 98.2,... и т.д. (Дробное представление). Вещественные константы в экспоненциальном представлении: Примеры: +4.3e-5, 1.2e+5 и т. д. ( Экспоненциальное представление ) Если у вас очень длинное число, имеет смысл представить его в экспоненциальном представлении. Символьные константы:Символьная константа состоит из одиночных символов, заключенных в одинарные кавычки ('') . Примеры допустимых символьных констант: 'M' 'V' '4' '$' Примеры недействительных константов персонажа : 'Joey' 'Checo' 'Lewis' Константы. должен иметь только один символ в одинарных кавычках . Одиночный символ с двойными кавычками также не является допустимой символьной константой Пример: "M" // Недопустимая символьная константа Двойные кавычки не допускаются. Если вы используете двойные кавычки с одним символом, это станет строкой C. Символьная константа должна быть заключена в одинарных кавычек . Пример: v // Недопустимая символьная константа В приведенном выше примере символ v не заключен в одинарные кавычки. Так что это не допустимая константа Character. Пожалуйста, следуйте приведенным выше рекомендациям при создании символьных констант. Строковые константы языка C:Строковый символ содержит ноль или один или несколько символов Заключен в двойные кавычки. (" ") . Примеры строковых констант: "Hello" "Max" "M1 Chip" Для каждой строки в программировании на C компилятор добавляет дополнительную NULL-символ в конце строки. Этот Символ NULL полезен для определения границ строки. Например, если вы читаете строку по одному символу, то, если вы достигнете Символ NULL. Это означает, что вы достигли конца строки и можете прекратить печать значения. нет специального типа данных для строковых констант Язык программирования C . C Использует массив символов для представления строковых данных. Здесь следует отметить, что символьные константы заключаются в одинарные кавычки, а строковые константы заключаются в двойные кавычки. 📢 Символьные константы заключаются в одинарные кавычки, а строковые константы заключаются в двойные кавычки. «В» и «V» — это совершенно разных на языке Си. Первый ( "V" ) - это строковая константа и вторая ( 'V' ) представляет собой константу из символов . Также «V» содержит два символа, один из которых является символом V и еще один символ ставится компилятором NULL символ, в то время как «V» содержит только один символ, который v Заключение:В этой статье мы обсудили константы в языке программирования C и различные типы констант C, такие как числовые, символьные и строковые константы. Оставить комментарий
|