Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры теория 113019.docx
Скачиваний:
0
Добавлен:
25.12.2019
Размер:
379.66 Кб
Скачать

33. Побитовые логические операции, операции над битами

В языке Си предусмотрен набор операций для работы с отдельными битами. Эти операции нельзя применять к переменным вещественного типа.

Обозначения операций над битами: ~ - дополнение (унарная операция); инвертирование (одноместная операция);& – побитовое «И» – конъюнкция;

– побитовое включающее «ИЛИ» – дизъюнкция;^ – побитовое исключ. «ИЛИ» – сложение по модулю 2; >> – сдвиг вправо; <<– сдвиг влево.

Общий вид операции инвертирования (поразрядное отрицание): ~ выражение инвертирует каждый разряд в двоичном представлении своего операнда. Остальные операции над битами имеют вид: Выражение_1 знак операции Выражение_2 Операндами операций над битами могут быть только выражения, приводимые к целому типу. Операции (~, &, |, ^) выполняются поразрядно над всеми битами операндов (знаковый разряд особо не выделяется). Операция & часто используется для маскирования некоторого множества бит. Операции сдвига выполняются также для всех разрядов с потерей выходящих за границы бит.Операция (|) используется для включения бит w = x | y, устанавливает в единицу те биты в x, которые равны 1 в y.

Необходимо отличать побитовые операции & и | от логических операций && и || , если x = 1, y = 2, то x & y равно нулю, а x && y равно 1.

Если выражение_1 имеет тип unsigned, то при сдвиге вправо освобо­жда­ющиеся разряды гарантированно заполняются нулями (логический сдвиг). Выражения типа signed могут, но необязательно, сдвигаться вправо с копированием знакового разряда (арифметический сдвиг). При сдвиге влево освобождающиеся разряды всегда заполняются нулями. Если выражение_2 отрицательно либо больше длины выражения_1 в битах, то результат операции сдвига не определен. Унарная операция (~) дает дополнение к целому, т.е. каждый бит со значением 1 получает значение 0 и наоборот. Операции сдвига << и >> применяются к целочисленным операндам и осуществляют соответственно сдвиг вправо (влево) своего левого операнда на число позиций, задаваемых правым операндом, например, x << 2 сдвигает x влево на две позиции, заполняя освобождающиеся биты нулями (эквивалентно умножению на 4). Операции сдвига вправо на k разрядов весьма эффективны для деления, а сдвиг влево – для умножения целых чисел на 2 в степени k. Подобное применение операций сдвига безопасно для беззнаковых и положительных значений выражения_1. Операции сдвига не учитывают переполнение и потерю значимости. В математическом смысле операнды логических операций над битами можно рассматривать как отображение некоторых множеств с размерностью не более разрядности операнда на значения {0,1}.Пусть единица означает обладание элемента множества некоторым свойством, тогда очевидна теоретико-множественная интерпретация рассма­три­ваемых операций:~ – дополнение; | – объединение; & – пересечение. Комбинирование операций над битами с арифметическими операциями часто позволяет упростить выражения

34. Операции сравнения. Логические операции. Унарные операции.

В языке Си используются четыре унарные операции, имеющие самый высокий приоритет, их часто называют первичными:– операция доступа к полям структур и объединений при помощи идентификаторов «.» – точка;– операция доступа к полям структур и объединений при помощи указателей «–>» – стрелка;– операция [ ] индексации, используемая при декларации массива и обращении к его элементам; – операция ( ) обращения к функции.Первичные операции будут рассмотрены в соответствующих разделах. В языке Си используются следующие операции сравнения, т.е. отношения между объектами:==– равно или эквивалентно;!=– не равно; < – меньше; <=– меньше либо равно;> –больше; >=– больше либо равно. Пары символов соответствующих операций разделять нельзя.Общий вид операций отношений:Операнд_1 Знак операции Операнд_2. Указанные операции выполняют сравнение значений первого операнда со вторым. Операндами могут быть любые арифметические выражения и указатели. Значения арифметических выражений перед сравнением вычисляются и преобразуются к одному типу.Арифметические операнды преобразуются по правилам, аналогичным для арифметических операций. Операнды-указатели преобразуются в целые числа необходимого типа. Результат сравнения указателей будет корректным в арифметическом смысле лишь для объектов одного массива.В языке Си нет логического типа данных. Результат операции отношения имеет значение 1, если отношение истинно, или в результате вычислений получено не нулевое значение, воспринимаемое компилятором Си как истина (true), или 0 – в противном случае, т.е. – ложно (false). Следовательно, операция отношения может использоваться в любых арифметических выражениях.Операции сравнения на равенство и неравенство имеют меньший приоритет, чем остальные операции отношений.Примеры использования операций отношений:y > 0 , x == y , x != 2 .

Отношения между объектами сложных типов проверяются либо посре­дс­твом последовательного сравнения их элементов (для массивов), либо используя стандартные библиотечные функции, которые будут рассмотрены позже.