Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
51
Добавлен:
16.02.2016
Размер:
445.44 Кб
Скачать

Операции сдвига влево и вправо

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

Рис. 2.2. Пример установки значений битов в байте.

Например:

unsigned char A = 12; // А = 000011002

А = А « 2; // А = 001100002

А = А » 3; // А = 000011002

Следует учитывать, что при использовании правого сдвига, если самый старший бит равен единице (признак отрицательного числа у переменных со спецификатором signed), некоторые компиляторы могут не "ввести" нули слева. Это связано с тем, что, чтобы избежать подобных ситуаций, рекомендуется преобразовывать операнд операции в беззнаковый тип (unsigned).

Операторы сравнения

Для того чтобы имелась возможность сравнивать между собой значения каких-либо переменных, язык C++ предусматривает так называемые операторы сравнения. Операторы сравнения — бинарные операторы вида:

Операнд1 Оператор__сравнения Операнд2.

К ним относятся следующие операторы:

Таблица 2.6. Операторы сравнения

Оператор

Название

<

Меньше

<=

Меньше или равно

>

Больше

>=

Больше или равно

=

Равно

i =

Не равно

В результате работы операторов сравнения возвращается логическое значение true (истина), если проверяемое условие верно, или false (ложь) в противном случае.

Операция "запятая"

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

Благодаря использованию данной операции при написании программ достигается высокая эффективность. К примеру, в операторе ветвления if, рассматриваемом ниже, можно в качестве выражения ввести:

if(i = CallFunc(), i > 7)

...

Тогда сначала выполнится вызов функция CallFunc() с присвоением результата переменной i, а затем произойдет сравнение значения i с числом 7.

Еще большей эффективности позволяет достичь использование операции "запятая" в операторе цикла for. Более подробно этот момент будет рассмотрен ниже.

Приоритет и порядок выполнения операций

Как в любой арифметике, в C++ операции выполняются в определенном порядке. Так, например, математические выражения вычисляются слева направо, в то время как оператор присвоения выполняется справа налево.

Для того чтобы компилятор мог разобраться, какое же действие осуществлять первым при выполнении операций, последние обладают важным свойством - приоритетом. В первую очередь выполняются операции с наивысшим приоритетом. В таблице 2.7 приводятся используемые в C++ операции с указанием их приоритета и направления выполнения.

Таблица 2.7.

Операции и приоритеты их выполнения

Оператор

Описание

Приоритет, направление

::

Разрешение видимости

16

=>

[]

Индекс массива

16

=>

()

Вызов функции

16

=>

Выбор члена структуры или класса

16

=>

->

++

Постфиксный инкремент

15

<=

--

Постфиксный декремент

15

<=

++

Префиксный итфемент

14

<=

--

Префиксный декремент

14

<=

sizeof

sizeof ()

Размер

14

<=

(тип)

Преобразование типа

14

^

Побитовое исключающее ИЛИ

14

<=

!

Логическое НЕ

14

<=

-

Унарный минус

14

<=

+

Унарный плюс

14

<=

&

Получение адреса

14

<=

*

Разыменование

14

<=

new

new [ ]

Создание динамического объекта

14

<=

delete

delete[ ]

Удаление динамического объекта

14

<=

casting

Приведение типа

14

*

Умножение

13

=>

/

Деление

13

=>

%

Остаток от деления

13

=>

+

Сложение

12

=>

-

Вычитание

12

=>

>>

Сдвиг вправо

11

=>

<<

Сдвиг влево

11

=>

<

Меньше

10

=>

<=

Меньше или равно

10

=>

>

Больше

10

=>

>=

Больше или равно

10

=>

==

Равно

9

=>

!=

Неравно

9

=>

&

Побитовое И

8

=>

^

Побитовое исключающее ИЛИ

7

=>

|

Побитовое ИЛИ

6

=>

&&

Логическое И

5

=>

| |

Логическое ИЛИ

4

=>

?:

Условие

3

<=

=

Присваивание

2

<=

*=

Умножение с присваиванием

2

<=

/=

Деление с присваиванием

2

<=

%=

Модуль с присваиванием

2

<=

+=

Сложение с присваиванием

2

<=

-=

Вычитанне с присваиванием

2

<=

«=

Сдвиг влево с присваиванием

2

<=

»=

Сдвиг вправо с присваиванием

2

<=

&=

Побитовое И с присваиванием

2

<=

^=

Исключающее ИЛИ с присваиванием

2

<=

|=

Побитовое ИЛИ с присваиванием

2

<=

throw

Генерация исключения

2

<=

,

Запятая

1

=>

Язык C++ предоставляет программисту возможность самостоятельно задавать порядок выполнения вычислений. С этой целью, как и в математике, операнды группируются при помощи скобок, которые могут быть вложенными друг в друга. Не существует ограничения на вложенность скобок. Приведенный ниже фрагмент иллюстрирует использование скобок для изменения порядка выполнения последовательности арифметических операторов.

#include <iostream.h> int main ()

{

int x = 0, у = 0;

int a = 3, b = 34, с = 82;

х = а * b + с;

у = (а * (b + с) ) ;

cout « "х = " « х « '\n';

cout « "у = " « у « '\n';

return 0;

}

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

х = 184

у = 348

Соседние файлы в папке ЯзыкС++Глушаков