Язык С++ и программирование на нем. Рейзлин В.И. - 17 стр.

UptoLike

Составители: 

19
Этот фрагмент программы можно проиллюстрировать так:
a 0 1 0 0 0 1 0 1 1 1 1 1 1 1 1 1
b 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
c=a^b 0 1 0 0 0 1 0 1 0 0 0 0 0 0 0 0
c=a|b 0 1 0 0 0 1 0 1 1 1 1 1 1 1 1 1
c=a&b 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
c=~b 1 0 1 1 1 0 1 0 0 0 0 0 0 0 0 0
С помощью операции & можно определить остаток от деления
операнда типа unsigned int на 2, 4, 8, 16 и т.д. Для этого достаточно
применить операцию & к делимому с масками 0x01, 0x03, 0x07, 0x0f,
0x1f и т.д. Например:
7&0x03 дает 3.
Другими словами, выделяются младшие биты числа, а остальные
устанавливаются в 0.
3.6. Сдвиги
Операции сдвига << >>осуществляют, соответственно, сдвиг вле-
во и вправо своего левого операнда на число битовых позиций, задан-
ных правым операндом. Таким образом, Х << 2 сдвигает Х влево на 2
позиции, заполняя освобождающиеся биты нулями, что эквивалентно
умножению на 4. Сдвиг вправо величины без знака сопровождается до-
полнением старших битов нулями. Сдвиг вправо такой величины на n
битов эквивалентен целочисленному делению левого операнда на 2 в
степени n.
Так,
5 << 3 дает 40;
7 >> 2 дает 1.
Отметим, что правый операнд должен быть константным выраже-
нием, т.е. выражением, включающим в себя только константы. Если
правый операнд отрицателен или он больше, или равен числу битов ле-
вого операнда, то результат сдвига не определен. Типом результата опе-
рации сдвига является тип левого операнда.