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

polevoy_cpp_2012_spring_lecture_12

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

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

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

•унарные

–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