Поразрядные операторы

Содержание

Слайд 2

Поразрядные операторы

Применяются для работы с булевыми векторами.
Булев вектор – набор 0

Поразрядные операторы Применяются для работы с булевыми векторами. Булев вектор – набор
и 1, который представляет собой набор признаков (каждый разряд – признак). 1 – признак присутствует, 0 – признак отсутствует.
Поразрядные операторы воздействуют на отдельные двоичные разряды (биты) своих операндов. Они определены только для целочисленных операндов, поэтому их нельзя применять к данным типа bool, float или double.

Слайд 3

Поразрядные операторы

Поразрядные операторы

Слайд 4

Поразрядные операторы И, ИЛИ, исключающее ИЛИ и НЕ

Поразрядные операторы И, ИЛИ, исключающее

Поразрядные операторы И, ИЛИ, исключающее ИЛИ и НЕ Поразрядные операторы И, ИЛИ,
ИЛИ и НЕ обозначаются следующим образом: &, |, ^ и ~. Они выполняют те же функции, что и их логические аналоги.
Но в отличие от логических операторов, поразрядные операторы действуют на уровне отдельных двоичных разрядов.

Слайд 5

Поразрядную операцию И

Поразрядную операцию И можно рассматривать как способ подавления отдельных двоичных

Поразрядную операцию И Поразрядную операцию И можно рассматривать как способ подавления отдельных
разрядов. Это означает, что если какой-нибудь бит в любом из операндов равен 0, то соответствующий бит результата будет сброшен в 0.

Слайд 6

Поразрядный оператор ИЛИ

Поразрядный оператор ИЛИ может быть использован для установки отдельных двоичных

Поразрядный оператор ИЛИ Поразрядный оператор ИЛИ может быть использован для установки отдельных
разрядов. Если в 1 установлен какой-нибудь бит в любом из операндов этого оператора, то в 1 будет установлен и соответствующий бит результата.

Слайд 7

Поразрядный оператор исключающее ИЛИ

Поразрядный оператор исключающее ИЛИ устанавливает двоичный разряд операнда в

Поразрядный оператор исключающее ИЛИ Поразрядный оператор исключающее ИЛИ устанавливает двоичный разряд операнда
том и только в том случае, если двоичные разряды сравниваемых операндов оказываются разными, как в приведенном ниже примере.

Слайд 8

Пример

Пример

Слайд 9

Пример программного кода

// Метод, проверяющий является ли число четным
void provChet(int x)

Пример программного кода // Метод, проверяющий является ли число четным void provChet(int

{
for (int i = 1; i <= x; i++)
{ if ((i & 1) == 0)
cout<<"Число“< else
cout<<"Число“<}

Слайд 10

Еще пример

// Метод, преобразующий четные числа в нечетные
// с помощью поразрядного

Еще пример // Метод, преобразующий четные числа в нечетные // с помощью
оператора |
void nechet(int x)
{ int result;
for (int i = 0; i <= x; i++)
{ result = i | 1;
printf(“%d “, result);}
}

Слайд 11

Операторы сдвига

В С имеется возможность сдвигать двоичные разряды, составляющие целое значение, влево

Операторы сдвига В С имеется возможность сдвигать двоичные разряды, составляющие целое значение,
или вправо на заданную величину. Ниже приведена общая форма для этих операторов:       значение << число_битов       значение >> число_битов
где число_битов — это число двоичных разрядов, на которое сдвигается указанное значение.

Слайд 12

Сдвиг влево

При сдвиге влево на 1 все двоичные разряды в указываемом значении

Сдвиг влево При сдвиге влево на 1 все двоичные разряды в указываемом
сдвигаются на одну позицию влево, а младший разряд сбрасывается в нуль.
Пример.
10111011 << 5 = 01100000.

Слайд 13

Сдвиг вправо беззнакового числа

При сдвиге вправо на 1 все двоичные разряды в

Сдвиг вправо беззнакового числа При сдвиге вправо на 1 все двоичные разряды
указываемом значении сдвигаются на одну позицию вправо.
Если вправо сдвигается целое значение без знака, то старший разряд сбрасывается в нуль.
Пример.
10111011 >> 1 = 01011101.

Слайд 14

Сдвиг вправо знакового числа

Если вправо сдвигается целое значение со знаком, то разряд

Сдвиг вправо знакового числа Если вправо сдвигается целое значение со знаком, то
знака сохраняется.
Для представления отрицательных чисел старший разряд целого числа устанавливается в 1.
Если сдвигаемое значение является отрицательным, то при каждом сдвиге вправо старший разряд числа устанавливается в 1.
Пример.
10111011 >> 1 = 11011101.
Если сдвигаемое значение является положительным, то при каждом сдвиге вправо старший разряд числа сбрасывается в нуль.
Пример.
00111011 >> 1 =00011101.

Слайд 15

При сдвиге влево и вправо крайние двоичные разряды теряются. Восстановить потерянные при

При сдвиге влево и вправо крайние двоичные разряды теряются. Восстановить потерянные при
сдвиге двоичные разряды нельзя, поскольку сдвиг в данном случае не является циклическим.

Слайд 16

Short int n = 6, result;
// Умножить на 2
result =

Short int n = 6, result; // Умножить на 2 result =
(int)(n << 1);
// Умножить на 4
result = (int)(n << 2);
// Разделить на 2
result = (int)(n >> 1);

Слайд 17

Работа с булевыми векторами

Когда работаем с данными как с булевым вектором, нужно

Работа с булевыми векторами Когда работаем с данными как с булевым вектором,
описывать их беззнаковым типом.
unsigned int x;

Слайд 18

Примеры

Установить 1 в i-м разряде булева вектора а
а = а|(1<Удалить 0 в

Примеры Установить 1 в i-м разряде булева вектора а а = а|(1
i-м разряде булева вектора а
а = ~(1<Проверить – есть ли 1 в i-ом разряде
if ((1<
Имя файла: Поразрядные-операторы.pptx
Количество просмотров: 47
Количество скачиваний: 0