Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

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



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

~ - дополнение (унарная операция); инвертирование (одноместная операция);

& - побитовое И - конъюнкция;

| - побитовое включающее ИЛИ - дизъюнкция;

^ - побитовое исключающее ИЛИ - сложение по модулю 2;

>> - сдвиг вправо;

<< - сдвиг влево.

Общий вид операции инвертирования:

~ <выражение>

Остальные операции над битами имеют вид

< выражение 1> < знак операции > < выражение 2>

Операндами операций над битами могут быть только выражения, приводимые к целому типу. Операции (~, &, |, ^) выполняются поразрядно над всеми битами операндов (знаковый разряд особо не выделяется):

~0xF0 ↔ x0F

0xFF & 0x0F ↔ x0F

0xF0 | 0x11 ↔ xF1

0xF4 ^ 0xF5 ↔ x01

Операция & часто используется для маскирования некоторого множества бит. Например, оператор w = n & 0177 передает в w семь младших бит n, полагая остальные равными нулю.

Операции сдвига выполняются также для всех разрядов с потерей выходящих за границы бит.

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

0x81<<1 ↔ 0x02

0x81>>1 ↔ 0x40

Если выражение 1 имеет тип unsigned, то при сдвиге вправо освобождающиеся разряды гарантированно заполняются нулями (логический сдвиг). Выражения типа signed могут, но необязательно, сдвигаться вправо с копированием знакового разряда (арифметический сдвиг). При сдвиге влево освобождающиеся разряды всегда заполняются нулями. Если выражение 2 отрицательно либо больше длины выражения 1 в битах, то результат операции сдвига не определен.

Унарная операция (~) дает дополнение к целому, т.е. каждый бит со значением 1 получает значение 0 и наоборот. Эта операция оказывается полезной в выражениях типа

X & (~)077,

где последние 6 бит X маскируются нулем.

Операции сдвига << и >> осуществляют соответственно сдвиг вправо (влево) своего левого операнда на число позиций, задаваемых правым операндом, например, x <<2 сдвигает x влево на две позиции, заполняя освобождающиеся биты нулями (эквивалентно умножению на 4). Операции сдвига вправо на k разрядов весьма эффективны для деления, а сдвиг влево - для умножения целых чисел на 2 в степени k:

x<<1 ↔ x*2;

x>>1 ↔ x/2

x<<3 ↔ x*8

Подобное применение операций сдвига безопасно для беззнаковых и положительных значений выражения 1.

В математическом смысле операнды логических операций над битами можно рассматривать как отображение некоторых множеств с размерностью не более разрядности операнда на значения {0,1}.

Пусть единица означает обладание элемента множества некоторым свойством, тогда очевидна теоретико-множественная интерпретация рассматриваемых операций:

~ - дополнение;

| - объединение;

& - пересечение.

Простейшее применение - проверка нечетности целого числа:

int i;

...

if (i &1) printf (" Значение i четно!");

Комбинирование операций над битами с арифметическими операциями часто позволяет упростить выражения.

Операция «,» (запятая)

Данная операция используется при организации строго гарантированной последовательности вычисления выражений (используется там, где по синтаксису допустима только одна операция, а нам необходимо разместить две и более, например, в операторе for). Форма записи:

выражение 1, …, выражение N;

выражения 1,…,N вычисляются последовательно и результатом операции становится значение выражения N, например:

m =(i =1, j = i ++, k =6, n = i+j+k);

получим последовательность вычислений: i =1, j =i =1, i =2, k =6, n =2+1+6, и в результате m=n =9.





Дата публикования: 2014-11-28; Прочитано: 434 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2025 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.146 с)...