Основные концепции Си++



Дата03.12.2022
өлшемі286,14 Kb.
#54577
түріУчебник

Поразрядные операции

учебник: Бьерн Страуструп.

Язык программирования С++

Опреации С++

  • +
  • -
  • *
  • /
  • ++
  • ++
  • --
  • --
  • !
  • %
  • ==
  • !=
  • *
  • &
  • []
  • ()
  • ||
  • &&
  • !
  • ? :
  • <
  • <=
  • >
  • >=
  • ==
  • *=
  • /=
  • %=
  • +=
  • -=
  • ::

Перепишите операторы разделив на категории:
Арифметические операторы
Операторы отношения
логические операторы
Определите результат оператора ?
х = 10; у = х > 9 ? 100 : 200;

переопределения имен:

int x;

void f()

{

int x;

x = 1;

{

int x;

x = 2;

x = 3;

}

int* p = &x;


Перепишите пример с комментарием на каждую строку

Примеры допустимых и не допустимых имен

  • hello this_is_a_most_unusially_long_name
  • DEFINED
  • foO
  • bAr
  • u_name
  • HorseSense
  • var0
  • var1
  • CLASS
  • _class ___
  • Теперь приведем примеры последовательностей символов, которые не могут использоваться как идентификаторы:
  • 012
  • a fool
  • $sys
  • Class
  • 3var
  • pay.due
  • foo~bar
  • .name if

Приведите свои примеры допустимых и не допустимых имен

ПОРАЗРЯДНЫЕ ОПЕРАЦИИ

Если число беззнаковое (unsigned), то все биты участвуют в формировании значения, но число может быть только положительным.


Информация в компьютере представляется в двоичной системе (наличие и отсутствие напряжения). Минимальной единицей информации является бит – ноль или единица, ложь или истина, «нет» или «да». Каждый байт состоит из 8 бит.
Если число знаковое (signed), то самый левый его бит обозначает знак числа – 0 для положительных чисел и 1 для отрицательных чисел, остальные биты формируют модуль числа (это относится только к целым числам, вещественные числа всегда со знаком).

нормальный код числа (дополнительный код числа)

Положительные целые числа в компьютере представляются в нормальном коде – это обычное представление числа в двоичной системе, а отрицательные – в дополнительном коде.


Для получения дополнительного кода берется двоичное представление равного по модулю целого числа, затем все цифры двоичного представления инвертируются (0 переходит в 1, 1 – в 0), при этом получается так называемый обратный код, к которому прибавляется 1 для получения дополнительного кода.

пример


Например, нормальный код числа 207 при использовании 2 байт – 0000000011001111,
а дополнительный код числа -207 – 1111111100110001 (количество цифр в числе существенно!).
Если сложить два эти числа, получается 0 (с переносом 1 за старший разряд числа). При сложении различных по модулю положительного и отрицательного чисел получается число в нормальном коде, если результат больше 0, и число в дополнительном коде, если результат меньше 0.

ПОРАЗРЯДНЫЕ ОПЕРАЦИИ

  • Поразрядные операции также проводятся только над соответствующими разрядами целочисленных операндов:
  • &: поразрядная конъюнкция (операция И или поразрядное умножение). Возвращает 1, если оба из соответствующих разрядов обоих чисел равны 1
  • |: поразрядная дизъюнкция (операция ИЛИ или поразрядное сложение). Возвращает 1, если хотя бы один из соответствующих разрядов обоих чисел равен 1
  • ^: поразрядное исключающее ИЛИ. Возвращает 1, если только один из соответствующих разрядов обоих чисел равен 1
  • ~: поразрядное отрицание или инверсия. Инвертирует все разряды операнда. Если разряд равен 1, то он становится равен 0, а если он равен 0, то он получает значение 1.

Побитовый сдвиг влево (<<) и побитовый сдвиг вправо (>>)


В C++ количество используемых бит основывается на размере типа данных (в 1 байте находятся 8 бит).
Оператор побитового сдвига влево (<<) сдвигает биты влево. Левый операнд является выражением, в котором они сдвигаются, а правый — на сколько мест нужно сдвинуть.
Поэтому в выражении 3 << 1 мы имеем в виду «сдвинуть биты влево в литерале 3 на одно место».

Примеры


В третьем случае, один бит перемещается за пределы самого литерала! Биты, сдвинутые за пределы двоичного числа, теряются навсегда.

Оператор побитового сдвига вправо (>>) сдвигает биты вправо.


unsigned int x = 4;
x = x << 1; // x должен быть 8
Чаще всего поразрядные логические операции используются для работы с небольшим по величине множеством данных (массивом разрядов). В этом случае каждый разряд беззнакового целого представляет один элемент множества, и число элементов определяется количеством разрядов. Бинарная операция & интерпретируется как пересечение множеств, операция | как объединение, а операция ^ как разность множеств.

Зачем нужны побитовые операторы

  • Для экономии использования памяти
  • Для приобретения дополнительной скорости в научных программах, в играх, в встроенных программах

Проверить примеры


5 | 6
3 & 7
6 ^ 3
1. Какой результат 0110 >> 2 в двоичной системе?
~7

Вычислите



Достарыңызбен бөлісу:




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет