Операции с разрядами

 

Поразрядные логические операции. Приводят к изменению значения переменной. Действия производятся над данными класса целых и char. Они называются поразрядными, потому что они выполняются отдельно над каждым разрядом (битом) независимо от разряда, находящегося слева или справа. Это необходимо аппататчикам; у них существует понятие словосостояние устройства: готово, не готово. Я могу изменять этот бит. Так же это пригодится тем, кто работает с видеопамятью, с помощью этих операций можно поменять цвет, буквы со строчных в заглавные и наоборот (достаточно поменять бит, отвечающий за эти буквы).

1) ~ Дополнение до 1 или поразрядное отрицание. Это унарная операция изменяет каждую 1 на 0, а 0 на 1. В отличие от логического отрицания операнд здесь меняется.

~(11010) получим (00101)

 

2) & Поразрядное Ислужит для сбрасывания битов. Эта бинарная операция сравнивает последовательно разряд за разрядом два операнда. Результат равен 1, если оба соответствующих разряда операндов равны 1

(11010110) & (10110111) => (10010110) сбрасывание битов в первом операнде.

Например: ‘A’ -4116 отличаются на один бит – пятый в 2-ой системе счис-

‘a’-6116 ления

 

3) | Поразрядное ИЛИ служит для установки (выставления) битов. Эта бинарная операция сравнивает последовательно разряд за разрядом два операнда. Результат равен 1, если один (или оба) из соответствующих разрядов операндов равны 1.

(11010110) | (10110111) => (11110111) Если в надо из 0 получить 1, то в маске ставят 1.

 

4) ^ Исключающее ИЛИ. Это бинарная операция. Результат равен 1, если один из разрядов равен 1 (но не оба)

(11010110) ^ (10110111) => (01100001)

 

Таблица истинности

х у ^

 

 

Операции сдвига

 

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

 

1) << сдвиг влево. Разряды левого операнда сдвигаются влево на число позиций, указанное правым операндом. Освобождающиеся позиции заполняются нулями, а разряды, сдвигаемые за левый предел левого операнда, теряются.

(10001010)<<2 = = 00101000

Это равноценно умножению на 2 в степени n

number<<n – умножает number на 2 в n-й степени

 

2) >> сдвиг вправо. Разряды левого операнда сдвигаются вправо на число позиций, указанное правым операндом. Разряды, сдвигаемые за правый предел левого операнда, теряются. Для беззнаковых чисел освобожденные слева разряды заполняются нулями. Для чисел со знаком минус слева дописывают единицы, говорят, что знаковый бит размножается.

x=5=1012 x>>1 0010=210

(10001010)>>2 = = 00100010

Эта операция выполняет деление на 2n:

number>>n – делит number на 2 в n-й степени. Деление целочисленное.

 

Операция условия ?:

 

Операция состоит из двух частей (? и :) и содержит три операнда

(операнд1 ? операнд2 : операнд 3).

(выражение)? Значение 1 : значение 2

Операнд вырабатывает условие истина или ложь.

Например: (х>0)? printf(“Истина”): printf(“ложь”);

Это более короткий способ записи оператора if else и называется «условным выражением».

Например условное выражение x = (y<0)? –y : y; означает, что если у меньше 0, то х = -у, в противном случае х = у. В терминах оператора if else это выглядело бы так:

if(y<0)

x = -y;

else

x = y;

Условные выражения более компактны и приводят к получению более компактного машинного кода.

Т.о. если условие операнда 1 истинно, то значением условного выражения является величина операнда 2, если условие операнда 1 ложно – величина операнда 2.

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

Пр.: max = (а>b) ? a : b;

Си – язык выражений. Убедились?








Дата добавления: 2016-02-02; просмотров: 1215;


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

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.008 сек.