Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на C / C++ / Язык программирования Си++. Лекции.DOC
Скачиваний:
173
Добавлен:
02.05.2014
Размер:
775.17 Кб
Скачать
    1. Дополнительные арифметические операции

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

a = a + 1; эквивалентно a++; или ++a;

Выполнение операций "++" или "--" вызывает увеличение или уменьшение на единицу значения соответствующей переменной.

Результат операций может быть различным в зависимости от того, где находятся знаки операций: если используется постфиксная операция, т.е операция ++ или -- записана после переменной, то результатом операции будет значение переменной до увеличения или уменьшения. Иными словами переменная сначала используется в выражении, а затем увеличивается или уменьшается. Например:

a = 4;

b = ( a++ ) * 5; /* здесь b = 20 */

Если используется префиксная операция, т. е. операция ++ или -- записана перед переменной, то результат операции - значение переменной после увеличения или уменьшения. Иными словами переменная вначале увеличивается или уменьшается, затем используется в выражении. Например:

a = 4;

b = ( ++ a ) * 5; /* здесь b = 25 */

Приоритет операций выше, чем у * или /, но все равно рекомендуется ставить скобки, чтобы не запутаться.

    1. Дополнительные операции присваивания

Очень часто в программах присутствуют операторы вида

a = a + b;

a = a - b;

a = a * b;

a = a / b;

Они изменяют значения некоторых переменных. В языке Cи для сокращения программ и повышения их эффективности используются дополнительные операторы присваивания:

a += b;

a -= b;

a *= b;

a /= b;

a %= b;

Дополнительные операции присваивания должны быть записаны слитно, без пробелов. Действие операции - изменение значения переменной, стоящей слева от знака операции. Результат - значение измененной переменной.

Дополнительные операции присваивания имеют самый низкий приоритет и выполняются справа налево.

Использование операций ++, --, +=,,, /=, %= вместо обычных не является обязательным, но их применение считается хорошим стилем программирования на языке Cи.

    1. Битовые операции

Любые данные, записанные в память ЭВМ, как известно, представляют собой последовательность бит, т.е. последовательность нулей и единиц. Например, любое число типа int будет занимать 2 байта в памяти, т.е 16 бит. Его можно рассматривать двояко: либо как целое число ( так и делается при выполнении операций *,/, +, -, % ), либо как последовательность бит, что возможно при использовании битовых операций.

Битовые операции выполняются независимо над каждым битом данных. Если операция двуместная, то она выполняется над соответствующими битами операндов.

В Си имеются следующие битовые операции:

~ битовое отрицание (одноместная),

& побитовое "и" (двуместная),

^ побитовое "исключающие или" (двуместная),

| побитовое "или" (двуместная).

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

Результаты битовых операций

op1

op2

~op1

op1 & op2

op1 ^ op2

op1 | op2

0

0

1

0

0

0

0

1

1

0

1

1

1

0

0

0

1

1

1

1

0

1

0

1

Рассмотрим несколько примеров.

Первый пример показывает, как с помощью операции | можно установить в единицу выбранные биты операнда:

/* a = 00001001 = 9 */

char a, b; /* 00011010 = 26 */

a = 9; /* -------- */

b = a | 26 /* b = 31 */ /* b = 00011011 = 31 */

Следующий пример показывает, как с помощью операции & можно обнулить старшую часть байта:

char a, b; /* a = 00101101 = 45 */

a = 45; /* 00001111 */

b = a & 0x0F; /* -------- */

/* b = 00001101 = 13 */

К битовым операциям относятся операции сдвига << и >> :

a << b сдвиг битов переменной a влево на b позиций,

a >> b сдвиг битов переменной a вправо на b позиций.

Например:

char a, b;

a = 26; /* a = 00011010 = 26 */

b = a << 2; /* b = 01101000 = 104 */

Сдвиг влево равносилен умножению на 2 в соответствующей степени. Сдвиг вправо - делению на 2 в соответствующей степени.

Все битовые операции выполняются слева направо. В следующей строке приведены битовые операции в порядке уменьшения их приоритета.

~, << >>, &, ^, |

Для двуместных битовых операций определены дополнительные операции присваивания:

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.

Соседние файлы в папке C++