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

polevoy_cpp_2012_spring_lecture_12

.pdf
Скачиваний:
9
Добавлен:
20.04.2015
Размер:
203.05 Кб
Скачать

Битовые операторы

применяются к целым числам

унарные

NOT (НЕ)

бинарные

AND (И)

OR (ИЛИ)

XOR (ИСКЛЮЧАЮЩЕЕ ИЛИ )

сдвиг

28.04.2012

cppNewb.ru

11

Биты как элементы множества

NOT – дополнение

AND – пересечение

OR – объединение

XOR – симметрическая разность

28.04.2012

cppNewb.ru

12

Битовое НЕ (~)

• инверсия битов

пример:

unsigned int v(15 + 11 * 256);

printf(“%x ”, v);

printf(“%x ”, ~v);

v = ~v;

printf(“%x\n”, v);

> b0f fffff4f0 f4f0

28.04.2012

cppNewb.ru

13

Битовое И (&)

• совпадение ненулевых битов

пример:

unsigned int v1(15 + 11 * 256); unsigned int v2(9 + 11 * 256);

printf(“%x & %x = %x\n”, v1, v2, v1 & v2);

> 00000b0f & 00000d0b = 0000090b

28.04.2012

cppNewb.ru

14

Битовое ИЛИ (|)

• ненулевые биты

пример:

unsigned int v1(15 + 11 * 256); unsigned int v2(9 + 11 * 256);

printf(“%x | %x = %x\n”, v1, v2, v1 | v2);

> 00000b0f | 00000d0b = 00000f0f

28.04.2012

cppNewb.ru

15

Битовое ИСКЛЮЧАЮЩЕЕ ИЛИ

(^)

• несовпадение ненулевых битов

пример:

unsigned int v1(15 + 11 * 256); unsigned int v2(9 + 11 * 256);

printf(“%x ^ %x = %x\n”, v1, v2, v1 ^ v2);

> 00000b0f ^ 00000d0b = 00000604

28.04.2012

cppNewb.ru

16

Битовый сдвиг

смещение бит в указанном направлении на указанное число позиций

“ вылезающие” за пределы числа биты

теряются

• “ дырки” заполняются

28.04.2012

cppNewb.ru

17

Битовый сдвиг влево (<<)

• правые биты заполняются нулями

пример:

signed int si(0xFFFFFFFF);

unsigned int ui(0xFFFFFFFF);

printf(“%08x %08x”, si << 4, ui << 2)

> fffffff0 fffffff8

28.04.2012

cppNewb.ru

18

Битовый сдвиг вправо (>>)

левые биты заполняются

нулями для беззнаковых

битом знака для знаковых

(зависит от реализациии)

пример:

signed int si(0xFFFFFFFF);

unsigned int ui(0xFFFFFFFF);

printf(“%08x %08x”, si >> 4, ui >> 4)

> ffffffff 0fffffff

28.04.2012

cppNewb.ru

19

Присваивающие версии операторов

lhs &= rhs

lhs |= rhs

lhs ^= rhs

val <<= shift

val >>= shift

28.04.2012

cppNewb.ru

20

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]