2.5. Операции и выражения
табл . 2.4 представлены основные операции языка С ++.
Таблица . 2.4. Основные операции языка С ++
увеличение значения на единицу
уменьшение значения на единицу
арифметическое отрицание ( унарный минус )
% остаток от деления << сдвиг влево
<= меньше или равно >= больше или равно
& поразрядная конъюнкция ( И )
^ поразрядное исключающее ИЛИ | поразрядная дизъюнкция ( ИЛИ )
умножение с присваиванием
деление с присваиванием
сложение с присваиванием
вычитание с присваиванием
остаток от деления с присваиванием
сдвиг влево с присваиванием
сдвиг вправо с присваиванием
поразрядная конъюнкция с присваиванием
поразрядная дизъюнкция с присваиванием
поразрядное исключающее ИЛИ с присваиванием
Перейдем к подробному рассмотрению основных операций языка .
2.5.1. Операции присваивания
Обычная операция присваивания имеет вид :
имя _ переменной = значение ; где значение это выражение , переменная , константа или функция . Выполняется операция так .
Сначала вычисляется значение выражения указанного в правой части оператора , а затем его результат записывается в область памяти , имя которой указано слева . Например , запись a=b означает , что переменной а присваивается значение b. Если a и b переменные разных типов , происходит преобразование типов : значение в правой части преобразуется к типу переменной левой части . Следует учитывать , что при этом можно потерять информацию или получить другое значение .
В С ++ существует возможность присваивания нескольким переменным одного и того же значения . Такая операция называется множественным присваиванием и в общем виде может
быть записана так :
имя _ переменной 1= имя _ переменной 2=..= имя _ переменной N= значение ;
Запись a=b=c=3.14159/6; означает , что переменным a, b и c было присвоено одно и то же
Операции += , = , *= , /= называют составным присваиванием . В таких операциях при
вычислении выражения стоящего справа используется значение переменной из левой части , например так :
x+=p; //Увеличение x на p, то же что и x=x+p. x-=p; //Уменьшения x на p, то же что и x=x-p. x*=p; //Умножение x на p, то же что и x=x*p. x/=p; //Деление x на p, то же что и x=x/p.
2.5.2. Арифметические операции
Операции +, -, *, / относят к арифметическим операциям . Их назначение понятно и не
требует дополнительных пояснений .
Операции инкремента ++ и декремента — так же причисляют к арифметическим , так как
они выполняют увеличение и уменьшение на единицу значения переменной . Эти операции имеют две формы записи префиксную ( операция записывается перед операндом ) и постфиксную ( операция записывается после операнда ). Так , например оператор p=p+1;
можно представить в префиксной форме ++p; и в постфиксной p++;. Эти формы отличаются при использовании их в выражении . Если знак декремента ( инкремента ) предшествует операнду , то сначала выполняется увеличение ( уменьшение ) значения операнда , а затем операнд участвует в выражении . Например ,
y=++x; //В переменной y будет храниться значение 13.
Если знак декремента ( инкремента ) следует после операнда , то сначала операнд участвует в выражении , а затем выполняется увеличение ( уменьшение ) значения операнда :
y=x++; //Результат – число 12 в переменной y.
Остановимся на операциях целочисленной арифметики . Операция целочисленного деления /
возвращает целую часть частного ( дробная часть отбрасывается ) в том случае если она
применяется к целочисленным операндам , в противном случае выполняется обычное деление : 11/4=2 или 11.0/4=2.75. Операция остаток от деления % применяется только к
целочисленным операндам : 11%4 = 3.
К операциям битовой арифметики относятся следующие операции : &, |, ^,
, <<, >>. В операциях битовой арифметики действия происходят над двоичным представлением целых
Арифметическое И (&). Оба операнда переводятся в двоичную систему , затем над ними происходит логическое поразрядное умножение операндов по следующим правилам :
Например , если А =13 и В =23, то их двоичное представление соответственно А =0000000000001101 и В =0000000000010111. В результате логического умножения A&B
получим 0000000000000101 или 5 в десятичной системе счисления . Таким образом , A&B=13&23=5.
Логическое умножение A&B
Арифметическое ИЛИ (|). Здесь также оба операнда переводятся в двоичную систему , после чего над ними происходит логическое поразрядное сложение операндов по следующим правилам :
Например , результат логического сложения чисел А =13 и В =23 будет равен A|B=31 ( рис . 2.2).
Логическое сложение A|B
Арифметическое исключающее ИЛИ (^). Оба операнда переводятся в двоичную систему , после чего над ними происходит логическая поразрядная операция ^ по следующим правилам :
). Эта операция выполняется над одним операндом . Применение операции
вызывает побитную инверсию двоичного представления числа
Сдвиг влево (M<<L). Двоичное представление числа M сдвигается влево на L позиций . Рассмотрим операцию 17<<3. Число 17 в двоичной системе имеет вид 10001. При сдвиге его на 3 позиции влево получим 10001000. В десятичной системе это двоичное число равно 136. Итак , 17<<3 =136. Заметим , что сдвиг на один разряд влево соответствует умножению на два , на два разряда умножению на четыре , на три умножению на восемь Таким . образом , операция M<<L эквивалентна умножению числа M на 2 в степени L.
Сдвиг вправо (M>>L). В этом случае двоичное представление числа M сдвигается вправо на L позиций , что эквивалентно целочисленному делению числа M на в степени L. Например ,
2.5.3. Логические операции
В С ++ определены следующие логические операции ||, &&, !. Логические операции выполняются над логическими значениями true ( истина ) и false ( ложь ). В языке С ++ ложь 0,
истина любое значение ¹ 0. В табл . 2.5 приведены результаты логических операций . Таблица . 2.5. Логические операции
Базовые операторы
В языке C# существуют следующие категории операторов:
- арифметические операторы;
- операторы отношения;
- логические операторы;
- операторы присваивания;
- поразрядные операторы;
- специальные операторы для особых случаев.
2. Какие операторы принадлежат к категории арифметических операторов?
В языке C# существуют следующие арифметические операторы:
3. Примеры использования операторов сложения ( + ), вычитания ( — ), умножения ( * ) и деления ( / ).
Операторы сложения ( + ), вычитания ( — ), умножения ( * ) и деления ( / ) можно применять к любому встроенному числовому типу данных.
Пример 1. Операции над переменными целых типов.
Важно: деление целых чисел дает результат целого типа.
Пример 2. Операции над переменными, где есть данные с плавающей запятой.
Пример 3. Операции над переменными смешанных числовых типов.
Если один из операндов имеет тип с плавающей запятой, а второй операнд имеет целый тип, то результатом будет тип с плавающей запятой.
4. Какие особенности использования оператора вычисления остатка от деления ( % )?
Оператор % применяется для вычисления остатка при делении двух чисел. В отличие от языка C/C++ оператор % может быть применен к данным с плавающей запятой.
Пример.
5. Примеры применения операторов инкремента ( ++ ) и декремента ( — ).
Оператор инкремента ( ++ ) увеличивает значение операнда на 1 .
Оператор инкремента i++ или ++i есть аналогичен оператору
Оператор декремента ( — ) уменьшает значение операнда на 1 .
Оператор декремента i — или —i аналогичен оператору
Пример 1.
Пример 2. Использование операции инкремента и декремента в выражении.
Пример 3.
6. Какие особенности применения операторов отношения в C# ?
Операторы отношения применяются для сравнения значений двух операндов между собой. Результатом работы операторов отношения есть значение истины ( true ) или лжи ( false ).
В языке C# введены следующие операторы отношения:
Пример.
7. Какие особенности применения логических операторов в языке C# ?
Операнды логических операций должны относиться к типу bool .
В языке C# к логическим относятся следующие операции:
Пример применения логических операций.
8. Какие преимущества дает использование сокращенных логических операторов && и || ?
Сокращенные логические операции && и || работают так же как и обычные логические операции & (логическое « И «) и | (логическое « ИЛИ «).
Однако, в случае длинных логических выражений, эти операции разрешают сократить время выполнения и повысить эффективность кода. Это осуществляется за счет того, что после выполнения первого операнда, второй операнд выполняется по мере необходимости.
Например. Рассмотрим логическое « ИЛИ » (оператор || ). Если первый операнд равен true , тогда нет смысла вычислять второй операнд, поскольку все выражение будет равно true .
Так же в логическом « И » (оператор && ). Если первый операнд равен false , тогда все выражение будет равно false . Таким образом, нет необходимости вычислять второй операнд.
За счет этого происходит сокращение времени обработки длинных логических выражений, которые содержат операции « И » и « ИЛИ «.
Пример.
Обычные логические операции & и || целесообразно использовать в тех случаях, если в программном коде обязательно нужно вычислять правый (второй) операнд.
9. Какие особенности применения оператора присваивания в программе?
Простейший оператор присваивания обозначается символом ‘ = ‘ (равно). Общая форма оператора присваивания:
Оператор присваивания может создавать «цепочку» присваиваний.
Пример.
В вышеприведенном примере значение ‘ 0.00 ‘ присваивается сначала переменной z , потом переменной y , потом переменной x .
Оператор присваивания может быть составным.
10. Как работают сокращенные (составные) операторы присваивания?
Сокращенные (составные) операторы присваивания позволяют упростить программирование некоторых операций присваивания. Сокращеные операторы дают более эффективный исполнительный код, поскольку левый операнд этих операторов вычисляется только один раз.
В C# существуют следующие сокращенные операторы присваивания для арифметических и логических операций:
Примеры применения сокращенных операторов присваивания.
11. Какие особенности применения поразрядных операторов в языке C# ?
Поразрядные логические операторы позволяют оперировать отдельными битами. Поразрядные логические операторы применяются только для целочисельных операндов.
В C# существуют следующие поразрядные логические операции:
Поразрядные операторы с двоичными единицами и нулями работают согласно нижеследующей таблице.
Пример.
12. Какие особенности применения операторов сдвига в C# ?
Операторы сдвига могут применяться только к целым типам.
Для выполнения сдвига двоичных разрядов в C# предусмотрено два оператора:
Общая форма операторов сдвига:
где число_бит – число двоичных разрядов, на которые сдвигается указанное значение.
Пример.
Операция сдвига влево на n разрядов множит число на 2 в степени n . Сдвиг вправо на n разрядов означает деление на 2 в степени n .
Операции в языке Си
Над объектами в языке Си могут выполняться различные операции:
- операции присваивания;
- операции отношения;
- арифметические;
- логические;
- сдвиговые операции.
Результатом выполнения операции является число.
Операции могут быть бинарными или унарными.
Бинарные операции выполняются над двумя объектами, унарные — над одним.
Операция присваивания
Операция присваивания обозначается символом = и выполняется в 2 этапа:
- вычисляется выражение в правой части;
- результат присваивается операнду, стоящему в левой части:
объект = выражение;
В случае если объекты в левой и правой части операции присваивания имеют разные типы используется операция явного приведения типа.
объект = (тип)выражение;
Операции отношения
Основные операции отношения:
- == эквивалентно — проверка на равенство;
- != не равно — проверка на неравенство;
- < меньше;
- > больше;
- <= меньше или равно;
- >= больше или равно.
Операции отношения используются при организации условий и ветвлений. Результатом этих операций является 1 бит, значение которого равно 1 , если результат выполнения операции — истина, и равно 0 , если результат выполнения операции — ложь.
Арифметические операции
Основные бинарные операции, расположенные в порядке уменьшения приоритета:
- * — умножение;
- / — деление;
- + — сложение;
- — — вычитание;
- % — остаток от целочисленного деления.
Основные унарные операции:
- ++ — инкрементирование (увеличение на 1);
- –– — декрементирование (уменьшение на 1);
- — — изменение знака.
Результат вычисления выражения, содержащего операции инкрементирования или декрементирования, зависит от того, где расположен знак операции (до объекта или после него). Если операция расположена до объекта, то сначала происходит изменение значения переменной на 1, а потом это значение используется для выполнения следующих операций. Если операция ++ или — расположена после переменной, то сначала выполняется операция, а потом значение переменной изменяется на 1.
Бинарные арифметические операции могут быть объединены с операцией присваивания:
- объект *= выражение; // объект = объект * выражение
- объект /= выражение; // объект = объект / выражение
- объект += выражение; // объект = объект + выражение
- объект -= выражение; // объект = объект — выражение
- объект %= выражение; // объект = объект % выражение
Логические операции
Логические операции делятся на две группы:
- условные;
- побитовые.
Условные логические операции чаще всего используются в операциях проверки условия if и могут выполняться над любыми объектами. Результат условной логической операции:
- 1 если выражение истинно;
- 0 если выражение ложно.
Вообще, все значения, отличные от нуля, интерпретируются условными логическими операциями как истинные.
Основные условные логические операции:
- && — И (бинарная) — требуется одновременное выполнение всех операций отношения;
- || — ИЛИ (бинарная) — требуется выполнение хотя бы одной операции отношения;
- ! — НЕ (унарная) — требуется невыполнение операции отношения.
Побитовые логические операции оперируют с битами, каждый из которых может принимать только два значения: 0 или 1.
Основные побитовые логические операции в языке Си:
- & конъюнкция (логическое И) — бинарная операция, результат которой равен 1 только когда оба операнда единичны (в общем случае — когда все операнды единичны);
- | дизъюнкция (логическое ИЛИ) — бинарная операция, результат которой равен 1 когда хотя бы один из операндов равен 1;
Для каждого бита результат выполнения операции будет получен в соответствии с таблицей.
a; // e = 241 = 1111 0001
f = a ^ b; // f = 7 = 0000 0111
Побитовые операции позволяют осуществлять установку и сброс отдельных битов числа. С этой целью используется маскирование битов . Маски, соответствующие установке каждого бита в байте, представлены в таблице
| Бит | Маска |
| 0 | 0x01 |
| 1 | 0x02 |
| 2 | 0x04 |
| 3 | 0x08 |
| 4 | 0x10 |
| 5 | 0x20 |
| 6 | 0x40 |
| 7 | 0x80 |
Для установки определенного бита необходимо соответствующий бит маски установить в 1 и произвести операцию побитового логического ИЛИ с константой, представляющей собой маску:
Для сброса определенного бита необходимо соответствующий бит маски сбросить в 0 и произвести операцию побитового логического И с константой, представляющей собой инверсную маску:
0x02); // a = 1, бит 1 сброшен
Бинарные побитовые логические операции могут быть объединены с операцией присваивания:
- объект &= выражение; // объект = объект & выражение
- объект |= выражение; // объект = объект | выражение
- объект ^= выражение; // объект = объект ^ выражение
Сдвиговые операции
Операции арифметического сдвига применяются в целочисленной арифметике и обозначаются как:
- >> — сдвиг вправо;
- << — сдвиг влево.
Общий синтаксис осуществления операции сдвига:
объект = выражение сдвиг КоличествоРазрядов;
Арифметический сдвиг целого числа вправо >> на 1 разряд соответствует делению числа на 2.
Арифметический сдвиг целого числа влево << на 1 разряд соответствует умножению числа на 2.
Операторы в C++
В этом руководстве мы узнаем о различных типах операторов в C++ с помощью примеров. В программировании оператор – это символ, который работает со значением или переменной.
Например, + – это оператор, используемый для сложения, а – – оператор, используемый для вычитания.
Операторы в С++ можно разделить на 6 типов:
- Арифметические;
- Операторы присваивания;
- Операторы отношения;
- Логические;
- Побитовые;
- Другие.
1. Арифметические операторы
Арифметические операторы используются для выполнения арифметических операций с переменными и данными. Например:
Здесь оператор + используется для добавления двух переменных a и b . Точно так же в С++ есть и другие арифметические операторы.
| Оператор | Операция |
|---|---|
| + | Дополнение |
| – | Вычитание |
| * | Умножение |
| / | Деление |
| % | Операция по модулю (остаток после деления) |
Пример 1
Здесь операторы +, – и * вычисляют сложение, вычитание и умножение соответственно, как мы могли ожидать.
Оператор деления /
Обратите внимание на операцию (a / b) в нашей программе. Оператор / является оператором деления.
Как видно из приведенного выше примера, если целое число делится на другое целое число, мы получим частное. Однако, если либо делитель, либо делимое является числом с плавающей запятой, мы получим результат в десятичном формате.
Оператор по модулю %
Оператор по модулю % вычисляет остаток. Когда a = 9 делится на b = 4, остаток равен 1.
Примечание. Оператор % можно использовать только с целыми числами.
Операторы увеличения и уменьшения
C++ также предоставляет операторы увеличения и уменьшения: ++ и – соответственно. ++ увеличивает значение операнда на 1, а – уменьшает его на 1.
Здесь значение num увеличивается до 6 с его начального значения 5.
Пример 2
В приведенной выше программе мы использовали операторы ++ и – в качестве префиксов. Мы также можем использовать эти операторы как постфиксные.
Есть небольшая разница, когда эти операторы используются в качестве префикса, по сравнению с тем, когда они используются в качестве постфикса.
2. Операторы присваивания
В C++ операторы присваивания используются для присвоения значений переменным. Например:
Здесь мы присвоили переменной a значение 5.
| Оператор | пример | Эквивалентно |
|---|---|---|
| = | a = b; | a = b; |
| + = | a += b; | a = a + b; |
| -= | a -= b; | a = a – b; |
| *= | a *= b; | a = a * b; |
| /= | a /= b; | a = a / b; |
| %= | a %= b; | a = a % b; |
Пример
3. Операторы отношения
Оператор отношения используется для проверки связи между двумя операндами. Например:
Здесь > – оператор отношения. Он проверяет, больше ли a чем b или нет.
Если отношение true, оно возвращает 1, тогда как если отношение false, оно возвращает 0.
| Оператор | Смысл | пример |
|---|---|---|
| == | Равно | 3 == 5 дает false |
| != | Не равно | 3! = 5 дает true |
| > | Лучше чем | 3> 5 дает false |
| < | Меньше, чем | 3 <5 дает true |
| > = | Больше или равно | 3> = 5 дает false |
| <= | Меньше или равно | 3 <= 5 дает true |
Пример
Примечание. Операторы отношения в C++ используются при принятии решений и в циклах.
4. Логические
Логические операторы используются для проверки того, является ли выражение true или false. Если выражение true, оно возвращает 1, тогда как если выражение false, оно возвращает 0.
| Оператор | пример | Смысл |
|---|---|---|
| && | выражение 1 && выражение 2 | Логическое AND. True, только если все операнды верны. |
| || | выражение1 || выражение2 | Логическое OR. True, если хотя бы один из операндов True. |
| ! | ! выражение | Логическое NOT. True, только если операнд false. |
В С++ логические операторы обычно используются при принятии решений. Чтобы лучше понять, давайте посмотрим на следующие примеры:
Пример
Пояснение к программе логического оператора:
- (3! = 5) (3 <5) оценивается как 1, потому что оба операнда (3! = 5) и (3 <5) равны 1 (true).
- (3 == 5) (3 <5) оценивается как 0, потому что операнд (3 == 5) равен 0 (false).
- (3 == 5) (3> 5) оценивается как 0, потому что оба операнда (3 == 5) и (3> 5) равны 0 (false).
- (3! = 5) || (3 <5) оценивается как 1, потому что оба операнда (3! = 5) и (3 <5) равны 1 (true).
- (3! = 5) || (3> 5) оценивается как 1, потому что операнд (3! = 5) равен 1 (true).
- (3 == 5) || (3> 5) оценивается как 0, потому что оба операнда (3 == 5) и (3> 5) равны 0 (false).
- ! (5 == 2) оценивается как 1, потому что операнд (5 == 2) равен 0 (false).
- ! (5 == 5) оценивается как 0, потому что операнд (5 == 5) равен 1 (true).
5. Побитовые
В C++ побитовые операторы используются для выполнения операций с отдельными битами. Их можно использовать только вместе с типами данных char и int.
Помимо описанных выше операторов, есть несколько других операторов, таких как sizeof. и т.д., которые нельзя аккуратно отнести к тому или иному типу.