Операции языка С. Арифметические, логические операции. Поразрядные операции. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Операции языка С. Арифметические, логические операции. Поразрядные операции.



Комбинация знаков операций и операндов, результатом которой является определенное значение, называется выражением. Знаки операций определяют действия, которые должны быть выполнены над операндами. Каждый операнд в выражении может быть выражением. Значение выражения зависит от расположения знаков операций и круглых скобок в выражении, а также от приоритета выполнения операций.

При вычислении выражений тип каждого операнда может быть преобразован к другому типу.

Преобразования типов могут быть неявными, при выполнении операций и вызовов функций, или явными, при выполнении операций приведения типов.

Операнд - это константа, литерал, идентификатор, вызов функции, индексное выражение, выражение выбора элемента или более сложное выражение, сформированное комбинацией операндов, знаков операций и круглых скобок. Любой операнд, который имеет константное значение, называется константным выражением. Каждый операнд имеет тип.

Оператор – это часть программы, которая может быть выполнена отдельно, т.е. оператор определяет некоторое действие.

Язык С содержит большое количество встроенных операций. Существует 5 основных класса операций:

– арифметические;

– логические;

– поразрядные;

– сравнения (присваивания);

– присваивания.

Арифметические, логические операции

Таблица 8

Знак операции Операция Группа операций
* Умножение

Арифметические

/ Деление
% Остаток от деления
+ Сложение
Вычитание
&& Логическое И

Логические операции

|| Логическое ИЛИ
! Не, отрицание

Если операция деления применяется у целому или символьному типам, то остаток от деления отбрасывается. Например, результатом операции 5/2 является 2. Оператор деления по модулю % нельзя применять к типам с плавающей точкой.

К логическим операциям относятся операция логического И (&&) и операция логического ИЛИ (||).

Операнды логических операций могут быть целого типа, плавающего типа или типа указателя, при этом в каждой операции могут участвовать операнды различных типов.

Операнды логических выражений вычисляются слева направо. Если значения первого операнда достаточно, чтобы определить результат операции, то второй операнд не вычисляется.

Логические операции не вызывают стандартных арифметических преобразований. Они оценивают каждый операнд с точки зрения его эквивалентности нулю. Результатом логической операции является 0 или 1, тип результата int.

Операция логического И (&&) вырабатывает значение 1, если оба операнда имеют нулевые значения.

Если один из операндов равен 0, то результат также равен 0. Если значение первого операнда равно 0, то второй операнд не вычисляется.

Операция логического ИЛИ (||) выполняет над операндами операцию включающего ИЛИ. Она вырабатывает значение 0, если оба операнда имеют значение 0, если какой-либо из операндов имеет ненулевое значение, то результат операции равен 1. Если первый операнд имеет ненулевое значение, то второй операнд не вычисляется.

Поразрядные операции

Поразрядные операции – это проверка, сдвиг или присваивание значений отдельным битам данных. Эти операции осуществляются над ячейками памяти, содержащие данные типа int и char.

Таблица 9

 

 

Знак операции Операция Группа операций
& Поразрядное И

Поразрядные операции

| Поразрядное ИЛИ
^ Поразрядное исключающее ИЛИ
<< Сдвиг влево
>> Сдвиг вправо
~ НЕ

Операнды поразрядных операций могут быть любого целого типа. При необходимости над операндами выполняются преобразования по умолчанию, тип результата - это тип операндов после преобразования.

Операция поразрядного логического И (&) сравнивает каждый бит первого операнда с соответствующим битом второго операнда. Если оба сравниваемых бита единицы, то соответствующий бит результата устанавливается в 1, в противном случае в 0.

Операция поразрядного логического ИЛИ (|) сравнивает каждый бит первого операнда с

соответствующим битом второго операнда. Если любой (или оба) из сравниваемых битов равен 1, то соответствующий бит результата устанавливается в 1, в противном случае результирующий бит равен 0.

Операция поразрядного исключающего ИЛИ (^) сравнивает каждый бит первого операнда с соответствующими битами второго операнда. Если один из сравниваемых битов равен 0, а второй бит равен 1, то соответствующий бит результата устанавливается в 1, в противном случае, т.е. когда оба бита равны 1 или 0, бит результата устанавливается в 0.

Пример.

int i=0x45FF, /* i= 0100 0101 1111 1111 */

     j=0x00FF; /* j= 0000 0000 1111 1111 */

char r;

  r = i^j; /* r=0x4500 = 0100 0101 0000 0000 */

  r = i|j; /* r=0x45FF = 0100 0101 0000 0000 */

  r = i&j; /* r=0x00FF = 0000 0000 1111 1111 */

                 

Поразрядные операторы сдвига сдвигают все биты переменной вправо или влево. Формат:

               Переменная >> количество разрядов

               Переменная << количество разрядов

Во время сдвигов бита в один конец числа, другие заполняются нулями. Но если число типа signedint отрицательно, то при сдвиге вправо левый конец заполняется единицами так, что знак числа сохраняется.

Поразрядная операция отрицания НЕ (~) инвертирует состояние каждого бита операнда, т.е. 0 преобразуется в 1, а 1 – в 0.


 

7. Операции языка С. Операция присваивания и отношения. Операция определения размера. Оператор последовательного вычисления.

 Комбинация знаков операций и операндов, результатом которой является определенное значение, называется выражением. Знаки операций определяют действия, которые должны быть выполнены над операндами. Каждый операнд в выражении может быть выражением. Значение выражения зависит от расположения знаков операций и круглых скобок в выражении, а также от приоритета выполнения операций.При вычислении выражений тип каждого операнда может быть преобразован к другому типу. Преобразования типов могут быть неявными, при выполнении операций и вызовов функций, или явными, при выполнении операций приведения типов. Операнд - это константа, литерал, идентификатор, вызов функции, индексное выражение, выражение выбора элемента или более сложное выражение, сформированное комбинацией операндов, знаков операций и круглых скобок. Любой операнд, который имеет константное значение, называется константным выражением. Каждый операнд имеет тип. Оператор – это часть программы, которая может быть выполнена отдельно, т.е. оператор определяет некоторое действие.Язык С содержит большое количество встроенных операций. Существует 5 основных класса операций:– арифметические;– логические;– поразрядные;– сравнения (присваивания);– присваивания.

Операция простого присваивания используется для замены значения левого операнда, значением правого операнда. При присваивании производится преобразование типа правого операнда к типу левого операнда по правилам, упомянутым раньше. Левый операнд должен быть модифицируемым.

Пример:

  int t;

                char f;

  long z;

  t=f+z;

Значение переменной f преобразуется к типу long, вычисляется f+z,результат преобразуется к типу int и затем присваивается переменной t.

Кроме простого присваивания, имеется целая группа операций присваивания, которые объединяют простое присваивание с одной из бинарных операций. Такие операции называются составными операциями присваивания и имеют вид:

Таблица 10

Знак операции Операция Группа операций
= Присваивание

Операции присваивания

*= Умножение с присваиванием
/= Деление с присваиванием
%= Остаток от деления с присваиванием
–= Вычитание с присваиванием
+= Сложение с присваиванием
<<= Сдвиг влево с присваиванием
>>= Сдвиг вправо присваиванием
&= Поразрядное И с присваиванием
|= Поразрядное ИЛИ с присваиванием
^= Поразрядное исключающее ИЛИ с присваиванием

Каждая операция составного присваивания выполняет преобразования, которые осуществляются соответствующей бинарной операцией. Левым операндом операций (+=) (-=) может быть указатель, в то время как правый операнд должен быть целым числом.

Примеры:

double arr[4]={ 2.0, 3.3, 5.2, 7.5 };

double b=3.0;

b+=arr[2]; /* эквивалентно b=b+arr[2]       */

arr[3]/=b+1; /* эквивалентно arr[3]=arr[3]/(b+1) */

Заметим, что при втором присваивании использование составного присваивания дает более заметный выигрыш во времени выполнения, так как левый операнд является индексным выражением.

Отношение (сравнение) – операции, в которых 2 переменные сравниваются друг с другом.

Таблица 11

Знак операции Операция Группа операций
< Меньше

Операции отношения

<= Меньше или равно
> Больше
>= Больше или равно
== Равно
!= Не равно
Операция определения размера С помощью операции sizeof можно определить размер памяти, которая соответствует идентификатору или типу. Операция sizeof имеет следующий формат:                                     sizeof(выражение);                                    В качестве выражения может быть использован любой идентификатор, либо имя типа, заключенное в скобки. Отметим, что не может быть использовано имя типа void, а идентификатор не может относится к полю битов или быть именем функции. Например, если компилятор числа типа int отводит 4 байта, а для чисел типа double – 8, то программа напечатает 8 4:Пример: double f; printf("%d", sizeof f); printf("%d", sizeof(int)); Оператор последовательного вычисления Операция последовательного вычисления обозначается запятой (,) и используется для вычисления двух и более выражений там, где по синтаксису допустимо только одно выражение. Эта операция вычисляет два операнда слева направо. При выполнении операции последовательного вычисления, преобразование типов не производится. Операнды могут быть любых типов. Результат операции имеет значения и тип второго операнда. Отметим, что запятая может использоваться также как символ разделитель, поэтому необходимо по контексту различать, запятую, используемую в качестве разделителя или знака операции.

 

8. Операции языка С. Условная операция. Операция (), операция [].

Комбинация знаков операций и операндов, результатом которой является определенное значение, называется выражением. Знаки операций определяют действия, которые должны быть выполнены над операндами. Каждый операнд в выражении может быть выражением. Значение выражения зависит от расположения знаков операций и круглых скобок в выражении, а также от приоритета выполнения операций.При вычислении выражений тип каждого операнда может быть преобразован к другому типу. Преобразования типов могут быть неявными, при выполнении операций и вызовов функций, или явными, при выполнении операций приведения типов. Операнд - это константа, литерал, идентификатор, вызов функции, индексное выражение, выражение выбора элемента или более сложное выражение, сформированное комбинацией операндов, знаков операций и круглых скобок. Любой операнд, который имеет константное значение, называется константным выражением. Каждый операнд имеет тип. Оператор – это часть программы, которая может быть выполнена отдельно, т.е. оператор определяет некоторое действие.Язык С содержит большое количество встроенных операций. Существует 5 основных класса операций:– арифметические;– логические;– поразрядные;– сравнения (присваивания);– присваивания.

Операция простого присваивания используется для замены значения левого операнда, значением правого операнда. При присваивании производится преобразование типа правого операнда к типу левого операнда по правилам, упомянутым раньше. Левый операнд должен быть модифицируемым.

Условная операция

Тернарное выражение состоит из трех операндов, разделенных знаками тернарной операции (?) и (:),и имеет формат: выражение1? выражение 2: выражение 3 Сначала вычисляется выражение 1. Если оно истинно, то вычисляется выражение 2 и его значение присваивается всему выражению. Если выражение 1 ложно, то вычисляется выражение 3 и всему выражению присваивается его значение.
Операции() и []

() Операция преобразования (или приведения) типа.

Эта бинарная операция в контексте так называемого постфиксного выражения и в контексте выражения приведения обеспечивает изменение типа значения выражения, представляемого вторым операндом. Информация о типе, к которому преобразуется значение второго операнда, кодируется первым выражением, которое является спецификатором типа. Существуют две формы операции преобразования типа: каноническая, при которой в скобки заключается первый операнд (в выражениях приведения), и функциональная (в постфиксных выражениях), при которой в скобки заключается второй операнд. При функциональной форме операции преобразования типа спецификатор типа представляется одним идентификатором. Для приввведениия значения к типу unsigned long следует использовать лишь каноническую форму операции преобразования. Механизм преобразования типа рассматривается ниже

Операция индексации

[]             Операция индексации.

Играет роль бинарной операции при индексации элементов массива (определение массива приводится ниже). Левый операнд представляет собой выражение, значением которого является адрес первого элемента массива. Правый операнд является выражением, определяющим значение индекса, т.е. смещения относительно первого элемента массива.


 



Поделиться:


Последнее изменение этой страницы: 2021-08-16; просмотров: 51; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 52.14.85.76 (0.029 с.)