АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

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

Читайте также:
  1. I. Психологические операции в современной войне.
  2. I. Психологические условия эффективности боевой подготовки.
  3. II. РАСПРЕДЕЛЕНИЕ ЛЕКАРСТВЕННЫХ СРЕДСТВ В ОРГАНИЗМЕ. БИОЛОГИЧЕСКИЕ БАРЬЕРЫ. ДЕПОНИРОВАНИЕ
  4. III. Методологические основы истории
  5. Административные, социально-психологические и воспитательные методы менеджмента
  6. Акмеологические основы самосовершенствования личности
  7. Активные операции коммерческих банков: понятие, значение, характеристика видов
  8. Анатомические (морфологические) признаки наружного строения человека
  9. Анатомо-физиологические данные.
  10. Анатомо-физиологические механизмы
  11. Анатомо-физиологические механизмы ощущений
  12. АНАТОМО-ФИЗИОЛОГИЧЕСКИЕ ОСОБЕННОСТИ ДЕТЕЙ МЛАДШЕГО ШКОЛЬНОГО ВОЗРАСТА

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

Обозначения операций над битами:

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

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

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

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

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

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

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

~ выражение

инвертирует каждый разряд в двоичном представлении своего операнда.

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

Выражение _1 знак операции Выражение _2

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

~0 x F0 «x 0F

0 x FF & 0 x 0F «x 0F

0 x F0 | 0 x 11 «x F1

0 x F4 ^ 0 x F5 «x 01

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

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

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

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

0 x 81 << 1 «0 x 02

0 x 81 >> 1 «0 x 40

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

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

Операции сдвига << и >> применяются к целочисленным операндам и осуществляют соответственно сдвиг вправо (влево) своего левого операнда на число позиций, задаваемых правым операндом, например, 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 четно!");

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

 


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.)