НОУ ИНТУИТ | Лекция | Основы языка Си: структура Си-программы, базовые типы и конструирование новых типов, операции и выражения
< Лекция 12 || Лекция 8: 1234567
Аннотация: Лекция посвящена введению в язык Си. Объясняются общие принципы построения Си-программы: разбиение проекта на h- и c-файлы, т.е. разделение интерфейса и реализации, использование препроцессора. Приводятся базовые типы языка Си, конструкции массива и указателя, позволяющие строить новые типы, а также модификаторы типов. Рассматриваются всевозможные операции и выражения языка Си.
Ключевые слова: Си, Java, указатель, адрес, массив, программа, контроль, операционная система, API, application program, interface, компилятор, слово, оператор DEFINE, файл, прототип функции, имя функции, константы, переменная, представление, standard input, препроцессор, директива, символическое имя, понимание текста, функция, алгоритм, значение, аргумент, вещественное число, вычисленное значение, вызов функции, стандартный поток вывода, логический тип, класс, тело оператора, специальный тип данных, volatility, Intel 80286, операции, сложение, умножение, оператор присваивания, префиксные операции, сумма элементов массива, аргумент операции, эквивалентное выражение, type cast, неявное преобразование
Основы языка Си
intuit.ru/2010/edi»>В настоящее время язык Си и объектно-ориентированные языки его группы (прежде всего C++, а также Java и C#) являются основными в практическом программировании. Достоинство языка Си — это, прежде всего, его простота и лаконичность. Язык Си легко учится. Главные понятия языка Си, такие, как статические и локальные переменные, массивы, указатели, функции и т.д., максимально приближены к архитектуре реальных компьютеров. Так, указатель — это просто адрес памяти, массив — непрерывная область памяти, локальные переменные — это переменные, расположенные в аппаратном стеке, статические — в статической памяти. Программист, пишущий на Си, всегда достаточно точно представляет себе, как созданная им программа будет работать на любой конкретной архитектуре. Другими словами, язык Си предоставляет программисту полный контроль над компьютером.Первоначально язык Си задумывался как заменитель Ассемблера для написания операционных систем.
Тем не менее, область применения языка Си не ограничилась разработкой операционных систем. Язык Си оказался очень удобен в программах обработки текстов и изображений, в научных и инженерных расчетах. Объектно-ориентированные языки на основе Си отлично подходят для программирования в оконных средах.
В данном разделе будут приведены лишь основные понятия языка Си (и частично C++). Это не заменяет чтения полного учебника по Си или C++, например, книг [6] и [8].
Мы будем использовать компилятор C++ вместо Cи. Дело в том, что язык Си почти целиком входит в C++, т.е. нормальная программа, написанная на Си, является корректной C++ программой. Слово «нормальная» означает, что она не содержит неудачных конструкций, оставшихся от ранних версий Си и не используемых в настоящее время. Компилятор C++ предпочтительнее, чем компилятор Си, т.к. он имеет более строгий контроль ошибок. Кроме того, некоторые конструкции C++, не связанные с объектно-ориентированным программированием, очень удобны и фактически являются улучшением языка Си. Это, прежде всего, комментарии //, возможность описывать локальные переменные в любой точке программы, а не только в начале блока, и также задание констант без использования оператора #define препроцесора. Мы будем использовать эти возможности C++, оставаясь по существу в рамках языка Си.
Структура Си-программы
intuit.ru/2010/edi»>Любая достаточно большая программа на Си (программисты используют термин проект ) состоит из файлов. Файлы транслируются Си-компилятором независимо друг от друга и затем объединяются программой-построителем задач, в результате чего создается файл с программой, готовой к выполнению. Файлы, содержащие тексты Си-программы, называются исходными.В языке Си исходные файлы бывают двух типов:
- заголовочные, или h-файлы;
- файлы реализации, или Cи-файлы.
Имена заголовочных файлов имеют расширение » .h «. Имена файлов реализации имеют расширения » .c » для языка Си и » .cpp «, » .cxx » или » .cc » для языка C++.
К сожалению, в отличие от языка Си, программисты не сумели договориться о едином расширении имен для файлов, содержащих программы на C++. Мы будем использовать расширение » .h » для заголовочных файлов и расширение » .cpp » для файлов реализации.
Заголовочные файлы содержат только описания. Прежде всего, это прототипы функций. Прототип функции описывает имя функции, тип возвращаемого значения, число и типы ее аргументов. Сам текст функции в h-файле не содержится. Также в h-файлах описываются имена и типы внешних переменных, константы, новые типы, структуры и т.п. В общем, h-файлы содержат лишь
int x;
определяющая целочисленную переменную x, является ошибкой. Вместо этого следует использовать описание
extern int x;
означающее, что переменная x определена где-то в файле реализации (в каком — неизвестно). Слово extern (внешняя) лишь сообщает информацию
о внешней переменной, но не определяет эту переменную.Файлы реализации, или Cи-файлы, содержат тексты функций и определения глобальных переменных. Говоря упрощенно, Си-файлы содержат сами программы, а h-файлы — лишь информацию о программах.
Представление исходных текстов в виде заголовочных файлов и файлов реализации необходимо для создания больших проектов, имеющих модульную структуру. Заголовочные файлы служат для передачи информации между модулями. Файлы реализации — это отдельные модули, которые разрабатываются и транслируются независимо друг от друга и объединяются при создании выполняемой программы.
intuit.ru/2010/edi»>Файлы реализации могут подключать описания, содержащиеся в заголовочных файлах. Сами заголовочные файлы также могут использовать другие заголовочные файлы. Заголовочный файл подключается с помощью директивы препроцессора #include. Например, описания стандартных функций ввода-вывода включаются с помощью строки#include <stdio.h>
(stdio — от слов standard input/output). Имя h-файла записывается в угловых скобках, если этот h-файл является частью стандартной Си-библиотеки и расположен в одном из системных каталогов. Имена h-файлов, созданных самим программистом в рамках разрабатываемого проекта и расположенных в текущем каталоге, указываются в двойных кавычках, например,
#include "abcd.h"
Препроцессор — это программа предварительной обработки текста непосредственно перед трансляцией. Команды препроцессора называются директивами. Директивы препроцессора содержат символ диез # в начале строки.
Препроцессор используется в основном для подключения h-файлов. В Си также очень часто используется директива #define для задания символических имен констант. Так, строка#define PI 3.14159265
задает символическое имя PI для константы 3.14159265. После этого имя PI можно использовать вместо числового значения. Препроцессор находит все вхождения слова PI в текст и заменяет их на константу. Таким образом, препроцессор осуществляет подмену одного текста другим. Необходимость использования препроцессора всегда свидетельствует о недостаточной выразительности языка. Так, в любом Ассемблере средства препроцессирования используются довольно интенсивно. В Си по возможности следует избегать чрезмерного увлечения командами препроцессора — это затрудняет понимание текста программы и зачастую ведет к трудно исправляемым ошибкам. В C++ можно обойтись без использования директив #define для задания констант. Например, в C++ константу PI можно задать с помощью нормального описания
const double PI = 3. 14159265;
Это является одним из аргументов в пользу применения компилятора C++ вместо Си даже при трансляции программ, не содержащих конструкции класса.
Дальше >>
< Лекция 12 || Лекция 8: 1234567
Задачник по Python. Тема 3. Логический тип данных
Оглавление
Содержание
python / задачник
Тип данных: bool
Контент: Вопросы (7шт) + задачи (4шт)
Предыдущая тема
Тема 2.Числа с плавающей
точкой
Следующая тема
Тема 4. Работа со списками
Оглавление
Введение
Поговорим о том, что такое логический тип данных, какими свойствами он обладает и какие операции можно к нему применять.
Перейти
Вопросы и ответы
7 вопросов по теме «Логический тип данных» + ответы
Перейти
Условия задач
4 задачи по теме двух уровней сложности: Базовый и *Продвинутый
Перейти
Решения задач
Приводим код решений указанных выше задач
Перейти
Введение
В логическом (булевом) типе данных имеется 2 значения: True («правда») и False («ложь»). Детальное описание этого типа дано в стандарте PEP-285.
Класс bool – это подкласс типа int (т.е. целых чисел). True и False – синглтон-объекты, которые по ходу выполнения программы никогда не меняют место расположения в памяти.
К логическим объектам можно применять математические операции. Есть 3 типа логических операторов: not («не»), or («или»), and («и»).
Операции с логическим типом данных обладают свойствами: коммутативность, дистрибутивность, ассоциативность; к ним применимо правило де Моргана.
Читайте также
Программирование на Python. Урок 3. Функции, условные выражения и циклы.
Разбираемся с функциями в Python: аргументы, тело, возвращаемое значение. Изучаем структуру и синтаксис условного оператора if..elif..else. Учимся писать циклы for и while. Решаем задачи.
Вопросы по теме «Логический тип данных»
Когда мы пишем True == 1, то сравниваем значения. Так как класс bool является подклассом целых чисел, то True в данном случае будет той же самой единицей.
Когда задается выражение True is 1, то сравниваются адреса в памяти. Так как логические данные являются синглтон-объектами, то у них имеется собственный адрес в памяти, который не меняется по ходу работы скрипта. Поэтому число 1 и True – занимают разные области в памяти.
Решение – Интерактивный режим
>>> True == 1
True
>>> True is 1 # Сравниваются ячейки памяти
False
>>> id(True), id(1)
(2078150976, 2078275504) # Как видим – разные адреса в памяти
Дистрибутивность связана с раскрытием скобок в логических выражениях.
Она определяется следующими правилами:
A and (B or C) == (A and B) or (A and C)
A or (B and C) == (A or B) and (A or C)
Примеры – Интерактивный режим
>>> True and (False or True) == (True and False) or (True and True)
True
>>> True or (False and True) == (True or False) and (True or True)
True
При сравнении двух булевых значений оператором or можно получить 4 варианта ответов. Только в одном случае будет False.
Примеры – Интерактивный режим
>>> True or True
True
>>> False or True
True
>>> False or False
False
>>> True or False
True
Если применить функцию bool() к большинству объектов в Python, то получим True. Все возможные исключения представлены ниже:
1. False
Пример – Интерактивный режим
>>> bool(False)
False
2. None
Пример – Интерактивный режим
>>> bool(None)
False
3. 0
Пример – Интерактивный режим
>>> bool(0)
False
4. Пустые последовательности (строки, списки, кортежи и т.д.)
Примеры – Интерактивный режим
>>> bool(»)
False
>>> bool([])
False
>>> bool({})
False
Также, можно принудительно внедрить метод __bool__() с возвращаемым значением False в любой класс.
Компьютер способен выполнять и еще более сложные выражения. А вот человеку, читающему такой код, будет очень сложно понять, каков порядок вычисления значений.
Если при написании программы приходится использовать такую конструкцию, то ее нужно обернуть в скобки в порядке выполнения. Это существенно упростит понимание выражения:
((a and not b) or (not c and d)) or e.
Приведем пример, доказывающий идентичность выражений.
Пример – Интерактивный режим
>>> 1 and not 2 or not 3 and 0 or 4
4
>>> ((1 and not 2) or (not 3 and 0)) or 4
4
Выражение bool(a) and bool(b) всегда вернет булево значение (т.е. True или False).
Выражение a and b возвращает последнее истинное значение или первое ложное (остальные выражения даже не будут вычисляться в этом случае).
Примеры – Интерактивный режим
>>> bool(7) and bool(‘Программирование’)
True
>>> bool(7) and bool(»)
False
>>> 7 and []
[]
>>> 7 and 44
44
>>> 1 and []
[]
>>> None and 11
None
Булевы операции выполняются слева направо в таком приоритете:
– в первую очередь рассчитываются выражения с оператором not;
– далее вычисляют все конструкции, имеющие оператор and;
– в последнюю очередь работаем с or.
Приведем пример вычисления выражения a or b and not c:
2 or 3 and not 1.
Вначале узнаем результат операции not 1: False.
Далее сравниваем 3 и False: 3 and False = False.
Последний шаг: 2 or False = 2.
Пример – Интерактивный режим
>>> 2 or 3 and not 1
2
Задачи по теме «Логический тип данных»
Решение
Решение
Решение
Решение
Решения
Задача 1. Базовый уровень
Условие
Напишите функцию dislike_6(a), которая всегда возвращает True, если только не передается число 6 типа int или типа float (в данном случае она вернет «Только не 6!»).
Вначале проверяем, является ли аргумент целым или вещественным числом. Если это так и он равен 6 или 6.0, то вернем «Только не 6!» Во всех остальных случаях результат представлен в виде True.
Решение – IDE
def dislike_6(a): if (type(a) is float or type(a) is int) and a == 6.0: return 'Только не 6!' return True # Тесты print(dislike_6(6.0)) print(dislike_6(6)) print(dislike_6('6')) print(dislike_6('Хорошо')) print(dislike_6([6, 6]))
Результат выполнения
Только не 6! Только не 6! True True True
Задача 2. Базовый уровень
Условие
Изучающий язык Python студент постоянно путается в свойствах логических операций (ассоциативность, дистрибутивность, коммутативность, правило де Моргана). Он решил написать функцию-подсказку help_bool(letter), которая принимает одну из 4 букв: к, а, д, м (соответствующую каждому свойству). Результат выполнения: определенное правило работы в виде строки. Если будет передано что-то иное, то вернется подсказка-строка с пояснением по каждому возможному аргументу.
Охарактеризуем каждое правило:
– Коммутативность (к)
A or B = B or A
A and B = B and A
– Дистрибутивность (д)
A and (B or C) == (A and B) or (A and C)
A or (B and C) == (A or B) and (A or C)
– Ассоциативность (а)
A or (B or C) == (A or B) or C == A or B or C
A and (B and C) == (A and B) and C == A and B and C
– Теорема Де Моргана (м)
not (A or B) == not A and not B
not (A and B) == not A or not B
not (A < B) == A >= B
not (not (A)) = A
Если пользователь забудет нужный аргумент, то дадим ему подсказку:
Возможные аргументы: к – Коммутативность, д – Дистрибутивность, а – Ассоциативность, м – Теорема Де Моргана. Можем даже принудительно задать параметр по умолчанию, который без верного аргумента будет возвращать подсказку.
Решение — IDE
def help_bool(letter=None): if letter == 'к': return 'A or B = B or A\nA and B = B and A' elif letter == 'а': return 'A or (B or C) == (A or B) or C == A or B or C\n' \ 'A and (B and C) == (A and B) and C == A and B and C' elif letter == 'д': return 'A and (B or C) == (A and B) or (A and C) \nA or (B and C) == (A or B) and (A or C)' elif letter == 'м': return 'not(A or B) == not A and not B \nnot(A and B) == not A or not B\n'\ 'not(A < B) == A >= B\nnot(not(A)) = A' else: return 'Возможные аргументы: к – Коммутативность, д – Дистрибутивность, а – Ассоциативность, ' \ 'м – Теорема Де Моргана' # Тесты print(help_bool()) print(help_bool([2, 6])) print(help_bool('к'))
Результат выполнения
Возможные аргументы: к – Коммутативность, д – Дистрибутивность, а – Ассоциативность, м – Теорема Де Моргана Возможные аргументы: к – Коммутативность, д – Дистрибутивность, а – Ассоциативность, м – Теорема Де Моргана A or B = B or A A and B = B and A
Задача 3.
*Продвинутый уровеньУсловие
Дано 2 скрипта. В первом – возникает ошибка, во втором – ошибки нет. Поясните почему. Скрипт 1. a = None if len(a) > 0 and a is not None: print('OK') Скрипт 2. a = None if a is not None and len(a) > 0: print('OK')
Применение оператора and к выражениям останавливается тогда, когда обнаруживается первое ложное значение. None – ложное значение, поэтому оно сразу возвращается, без вычисления второй половины выражения во втором скрипте.
В первом же примере мы пытаемся найти длину None, а такого свойства у значения нет. Поэтому возникает ошибка.
Решение – IDE
a = None if a is not None and len(a) > 0: print('OK') a = 'Нет ошибок' if a is not None and len(a) > 0: print('OK')
Результат выполнения
– первое выражение будет проигнорировано – второе выражение напечатает 'OK'.
Решение – IDE
a = None if len(a) > 0 and a is not None: print('OK')
Результат выполнения
TypeError (ошибка типа).
Задача 4. *Продвинутый уровень
Условие
После изучения темы «Логический тип в Python» перед учеником стала задача написать функцию divider(a, b), принимающую любые 2 числовых параметра. Задача функции: разделить a на b. Если в знаменателе введут ноль, то результат будет следующим: «Нули в знаменателе не приветствуются». В противном случае выводится итог деления чисел, возведенный в куб. Решите задание без использования условия if, применяя свойства логических операторов.
Для решения задачи необходимо вспомнить о свойствах операторов and, or.
Если решать задание «в лоб», то оно очень простое.
Решение – IDE
def divider(a, b): if b == 0: return 'Нули в знаменателе не приветствуются' return (a / b) ** 3
Однако требуется не использовать условия.
Решение – IDE
def divider(a, b): return b and (a / b) ** 3 or 'Нули в знаменателе не приветствуются' # Тесты print(divider(10, 4)) print(divider(10, 0)) print(divider(-12.2, 2)) print(divider(-6.4, 0))
Результат выполнения
15.625 Нули в знаменателе не приветствуются -226.98099999999997 Нули в знаменателе не приветствуются
Предыдущая тема
Тема 2.Числа с плавающей
точкой
Следующая тема
Тема 4. Работа со списками
Как вам материал?
ПОКАЗАТЬ КОММЕНТАРИИ |
Задачник. Программирование на Python.
Задачник по Python. Тема 1. Целые числа.
Задачник по Python. Тема 2. Числа с плавающей точкой
Задачник по Python. Тема 3. Логический тип данных
Задачник по Python. Тема 4. Работа со списками
Булев тип C9X
1. Введение
1.1 Назначение
Этот документ определяет форму и интерпретацию нового типа для язык Си.
1.2 Область применения
Этот документ, хотя и расширяет стандарт C, по-прежнему области применения этого стандарта и, таким образом, соблюдает все правила и рекомендации этому стандарту, за исключением случаев, когда это прямо указано в настоящем документе.
1.3 Каталожные номера
- C9X CD1, SC22/N2620, Языки программирования — C .
- WG14/N738, Фаранс. Улучшенная логическая формулировка .
- WG14/N743, Китон. Расширения битового поля .
Все ссылки на CD1 будут представлены в виде номеров подпунктов. Например, §6.4 ссылается на константные выражения.
2. Обоснование
Многие программы на C используют обычные целочисленные типы для хранения только единиц или нулей. обозначая логическое значение true или false соответственно. Это приводит к коду, который трудно читать, потому что его смысл не очевиден из шрифта использовался.
Одним из способов решения проблемы является определение в каждой программе собственного логического типа. Этот на самом деле произошло в большом количестве случаев. Реализации различаются по такие детали, как написание имени типа и его определение как typedef, тип перечисления или макрос препроцессора. Эти различия в синтаксисе и семантика может вызвать нежелательные различия в поведении между программами.
Решение состоит в стандартизации логического типа. Это могло быть реализовать любым из способов, которые разработчики C использовали в прошлом, или как тип, встроенный в язык. Комиссия выбрала второе, потому что это лингвистически чище. Это дает переводчику прямое знание типа, который позволяет определить согласованные правила продвижения и что также может открыть новые возможности для оптимизации.
Поскольку C так долго существовал без логического типа,
новый стандарт должен сосуществовать со старыми средствами правовой защиты. Поэтому имя типа
берется из зарезервированного пространства идентификатора. Для поддержания ортогонального продвижения
правил, тип Boolean определяется как беззнаковый целочисленный тип, способный
представления значений 0 и 1. Более традиционные имена для
тип и его значения затем становятся доступными только при включении
заголовок
3. Редактирование языка
Необходимые изменения приведены ниже и перечислены по расположению на C9X CD1.
§4. Соответствие
Параграф 2:
Добавить
Ссылки вперед:
Добавить «логический тип и значения
§6.1.1 Ключевые слова
Параграф 1:
Добавить ключевое слово _Bool .
Параграф 2:
Изменить «(полностью в нижнем регистре)» на «(с учетом регистра).»
§6.1.2.5 Типы
После абзаца 1 добавить следующий абзац:
Объект, объявленный как тип _Bool , достаточно велик для хранения
значения 0 и 1.
Пункт 5, заменить следующим:
Типы целых чисел без знака, соответствующие стандартному целому числу со знаком типы являются стандартными беззнаковыми целочисленными типами .
со следующим:
Тип _Bool и соответствующие целочисленные типы без знака к стандартным целочисленным типам со знаком относятся стандартные беззнаковых целых чисел. тип .
В абзаце 6 перед первым предложением добавить следующее:
Стандартные целочисленные типы со знаком и стандартные целочисленные типы без знака
вместе называемые стандартными целочисленными типами .
§6.2.1.1 Символы и целые числа
Измените заголовок на «Логические значения, символы и целые числа».
Пункт 1:
Удалить третий и пятый пункты списка.
Перед «Ранг символов . . . » вставка:
— Ранг любого целочисленного типа без знака должен быть равен рангу соответствующего ему
целочисленный тип со знаком, если такой соответствующий тип существует.
— Ранг любого стандартного целочисленного типа должен быть больше, чем ранг
любого расширенного целочисленного типа с той же шириной.
Параграф 1, после «Ранг char . . . » вставить:
— Ранг _Bool должен быть меньше ранга всех
другие стандартные целочисленные типы.
Параграф 2:
Замените «Битовое поле типа int » на «Битовое поле».
типа _Bool , int .»
§6.2.1.1+ Логический тип
Добавить следующий абзац в качестве нового подпункта между 6.2.1.1 и 6.2.1.2:
Когда значение понижается до _Bool , результат равен 0, если
значение равно 0 и 1 в противном случае.
§6.2.1.2 Целые числа со знаком и без знака
Параграф 1:
Изменить «другой целочисленный тип» на «другой целочисленный тип, отличный от _Bool »
§6.2.1.3 Действительное число с плавающей запятой и целое число
Параграф 1:
Изменить «преобразовано в целочисленный тип» на «преобразовано в целочисленный тип другое
чем _Bool . »
§6.5.2 Спецификаторы типов
Параграф 1:
Добавить _Bool .
Параграф 2:
Добавить _Bool .
Параграф 4:
Изменить «указанный int » to «указанный int .»
§6.5.2.1 Спецификаторы структуры и объединения
Параграф 8:
Изменить « signed int или unsigned int » на
« _Bool , со знаком int или без знака
интервал .»
После абзаца 8 добавить следующий абзац:
Если значение 0 или 1 хранится в битовом поле типа _Bool любой ненулевой ширины (включая однобитовое битовое поле), исходный
значение и значение битового поля должны сравниваться равными.
§7.1.7 Логический тип и значения
Заменить пункты 1-3 следующим текстом:
Макрос
логический
определяется как _Bool .
Остальные три макроса подходят для использования в #if директивы предварительной обработки. они
правда
, который расширяется до десятичной константы 1,
ложь
, который расширяется до десятичной константы 0 и
, который расширяется до десятичной константы 1.
Сноска 138:
Удалите эту сноску, так как она больше не применяется теперь, когда _Bool является типом первого класса. В качестве альтернативы содержание сноски может
быть адаптированы для использования в обосновании.
§B.1.3 Ключевые слова
Добавьте ключевое слово _Bool .
§B.2.2 Объявления
Добавить спецификатор типа _Bool .
§H.2.1 Логический тип
Заменить параграф 1 следующим:
Тип данных LIA-1 Boolean реализован типом данных C _Bool ,
со значениями true и false from
§K.2 Неопределенное поведение
Замените это:
Битовое поле объявлено с типом, отличным от квалифицированного или неквалифицированного версия со знаком int или целое число без знака (6. 5.2.1).
со следующим:
Битовое поле объявлено с типом, отличным от квалифицированного или неквалифицированного версия _Bool , signed int или unsigned интервал (6.5.2.1).
§K.5.8 Нецелые типы битовых полей
Измените заголовок на «Расширенные типы битовых полей».
Заменить пункт 1 следующим:
Типы, отличные от _Bool , unsigned int или signed int могут быть объявлены как битовые поля с соответствующими
максимальная ширина (6.5.2.1).
4. Заключение
Вышеупомянутые изменения приведут C9X в соответствие с комитетом. решение путем добавления первоклассного логического типа. Это облегчит прошлое проблемы из-за разных реализаций.
логических выражений
логических выраженийЛогический тип данных — bool
В C++ тип данных bool
используется для представления логических данных. Каждая bool
константа или переменная содержит один из
два значения: true
или false
.
true
и false
— это две константы C++.
true
имеет значение 1 .
false
имеет значение 0 .
Если проверочное выражение не имеет тип bool
,
оно автоматически приводится к типу bool
, когда оно
оценивается.
Ненулевое значение приводится к true
и нулевое значение приводится к false
.
Логические выражения
Логическое выражение может быть простым логическим значением или более сложное выражение, включающее один или несколько реляционных и логических операторов. Реляционные операторы принимают два операнда и проверяют связь между ними. их. В следующей таблице показаны реляционные операторы и соответствующие символы C++.Реляционные операторы | |
---|---|
Символ С++ | Описание |
== | равно |
!= | не равно |
> | больше |
< | меньше |
>= | больше или равно |
<= | меньше или равно |
номер 1 оценивается какtrue
, если значение, хранящееся вnumber1
, меньше, чем значение, хранящееся вnumber2
, и оценивается какложь
иначе.Когда оператор отношения применяется между переменными типа
char
, утверждение с точки зрения того, где два операнда попадают в сопоставление последовательность определенного набора символов. Например,символ1 <символ2оценивается вtrue
, если значение, хранящееся вcharacter1
, приходит перед символом, хранящимся вcharacter2
в последовательности сопоставления машины, на которой вычисляется выражение. Вы можете думать о последовательность сопоставления в алфавитном порядке, чтобы помочь вам понять ее. Набор символов ASCII широко используется в качестве последовательности сопоставления.Простое логическое выражение является либо логической переменной, либо логическим константа или выражение, включающее операторы отношения, которое оценивает либо истина или ложь . Эти простые логические выражения могут быть объединены с использованием логических операций , определенных над логическими значениями. Там три логических оператора: И, ИЛИ и НЕ . Вот таблица показывая, как они используются в C++.
Логические операторы | |
---|---|
Символ С++ | Описание |
&& | и Логический оператор:
|
|| | Логический оператор или :
|
! | Логический оператор , а не .
|
Приоритет операторов
Если реляционные операторы и логические операторы объединены в одном
выражение в C++, логический оператор NOT !
имеет наивысший приоритет,
реляционные операторы имеют следующий наивысший приоритет, а логические
операторы И &&
и ИЛИ ||
имеют самую низкую. Выражения в скобках
всегда оцениваются первыми .
В следующей таблице приведены приоритеты всех операторов C++. мы видели до сих пор.
Наивысший приоритет | ( ) | | ++х --х | | ! Унарный + Унарный - | | * / % | | + - | | << >> | | < <= > >= | | == != | | && | | || | | = | | х++ х-- | В Самый низкий приоритет
Операторы в одной строке таблицы имеют одинаковый приоритет.