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

C. Тема 1. Раздел 4

.pdf
Скачиваний:
14
Добавлен:
21.03.2016
Размер:
835.41 Кб
Скачать

Битовый сдвиг – все биты числа сдвигаются на указанное количество двоичных разрядов влево или вправо, освободившиеся разряды обычно заполняются нулями

0x0ff << 4 → 0xff0

0xff0 >> 4 → 0x0ff

0xfffffff0 >> 4 → ?

Возможны варианты: 0xffffffff и 0x0fffffff

Битовый сдвиг – идеальный способ получения степеней двойки, а также целочисленного деления и умножения на степени двойки

0xffff0000 & 0x12345678 0x12340000

0xffff0000 | 0x12345678 0x12345678

0xf0f0f0f0 ^ 0x0f0f0f0f 0xffffffff

Ложь – это 0, а истина – не 0

Сравнение двух чисел

5 == 10 → 0

10 == 10 → не 0

5!=10 → не 0

10 != 10 → 0

5 < 10 → не 0

5 > 10 → 0

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

0 < 10 && 10 < 100 → не 0

0 < 10 && 10 < 5 → 0

Как ввести TRUE и FALSE?

Использовать символические константы

Как упростить: a = a + 10? Это просто: a +=10

А как упростить: a = a << 2, a = a * 5, a = a / 10,

a = a % 2, a = a & 0x0000ffff?

Вы ещё не догадались?

Применение

e1, e2

Сначала выполняется выражение e1, потом выражение е2

Значением всего выражения является значение выражения е2

Пример

int i = 10, j = 3;

 

 

 

 

 

 

 

 

 

Наименование

Описание

 

 

 

 

 

 

-

Изменение знака числа

 

 

 

 

 

 

++ --

Инкрементация, декрементация

 

 

 

 

 

 

~

Битовое отрицание

 

 

 

 

 

 

!

Логическое отрицание

 

 

 

 

 

 

&

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

 

 

 

 

 

 

*

Разадресация

 

 

 

 

 

 

sizeof

Определение размера требуемой памяти в байтах

 

 

 

 

 

Как упростить: a = a + 1? Можно так: a += 1

Или ещё проще: a++

Как упростить: a = a - 1? Элементарно: a--

В чём разница префиксной и постфиксной инкрементации?

Для простейших выражений, типа i++; или ++i; – никакой

Для более сложных выражений:

int i = 0;

int a = i++ + 10; // i = 1, a = 10 int b = ++i - 1; // i = 2, b = 1

Битовое отрицание

~0x00000000 → 0xffffffff

~0xffffffff → 0x00000000

~0x0f0f0f0f → 0xf0f0f0f0

Логическое отрицание

!0xffffffff → 0

!0 → не 0

!0x0f0f0f0f → 0

Пример из жизни:

Маленький файл можно быстро перекинуть с флэшки на флэшку.

Большой файл, например, фильм, с флэшки на флэшку перекидывать долго, поэтому быстрей перекинуть адрес страницы в Интернете, с которой можно скачать этот фильм

То же самое и для переменных

Маленькие по размеру переменные можно быстро копировать целиком и хранить в стеке

Большие по размеру переменные долго копировать, в стек они не всегда влезают, поэтому быстрей их передавать по ссылке

Важное отличие – если хотим, чтобы кто-то поменял значение нашей переменной, то нужно передавать не копию переменной, а ссылку на неё или её адрес