Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка-ТП-С++.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
661.5 Кб
Скачать

4.5.4. Побитовые операции

Для обработки на уровне битов С++ имеет следующие операции:

– сдвиг влево (<<);

– сдвиг вправо (>>);

– И (&);

– ИЛИ (|);

– исключающее ИЛИ (^);

– НЕ (~).

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

void main();

{

int a, b, c;

char *format1, *format2;

format1 = "%04X %s %04X = %04X\n";

format2 = "%c%04X = %04X\n";

a = 0xOFFO; b = 0xFFOO;

c = a<<4; printf(format1, a, "<<", 4, c);

c = a>>4; printf(format1, a, ">>", 4, c);

c = a & b; printf(format1, a, "&", b, c);

c = a | b; printf(format1, a, "|", b, c);

c = a ^ b; printf(format1, a, "^", b, c);

c = ~ a; printf(format2, "~", a, c);

c = - a; printf(format2, "-", a, c);

}

Опять же, попробуйте предугадать то, что будет выводить эта программа, не запуская ее. Заметим, что спецификаторы ширины поля выравнивают выводимые значения; спецификатор %04X указывает на использование нулей в начале числа, на ширину поля вывода четыре цифры и на шестнадцатеричное представление (основание 16).

4.5.5. Комбинированные операции

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

<переменная> = <переменная> <операция> <выражение>;

может быть заменено на

<переменная> <операция> = <выражение>;

Ниже приводятся некоторые примеры таких выражений и способы их сокращения:

a = 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; сокращается до a <<= b;

a = a >> b; сокращается до a >>= b;

a = a & b; сокращается до a &= b;

a = a | b; сокращается до a |= b;

a = a ^ b; сокращается до a ^= b;.

4.5.6. Адресные операции

С++ поддерживает две специальные адресные операции: операцию определения адреса (&) и операцию обращения по адресу (*).

Операция & возвращает адрес данной переменной; если sum является переменной типа int, то &sum является адресом (расположения в памяти) этой переменной. С другой стороны, если msg является указателем на тип char, то *msg является символом, на который указывает *msg. Введите следующую программу и посмотрите, что получится.

void main

{

int sum;

char &msg;

sum = 5 +3;

msg = "Hello, there\n";

printf("sum = %d &sum = %p \n", sum, &sum);

printf("*msg = %c msg = %p \n", *msg, msg);

}

В первой строке печатается два значения: значение sum (8) и адрес sum (назначаемый компилятором). Во второй строке также печатается два значения: символ, на который указывает msg (H), и значение msg, которое является адресом этого символа (также назначен компилятором).

4.6. Условные операторы

Имеется несколько операторов, о которых мы еще не говорили: условные и логические операторы. При этом возникают некоторые непростые моменты в выражениях, которые мы приберегли для обсуждения условных (true или false – истина или ложь) операторов.