Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2009 лекции ПЯВУ часть1.doc
Скачиваний:
22
Добавлен:
27.03.2015
Размер:
823.3 Кб
Скачать

Побитовые операции

Операция

Результат

Объяснение операции

3 | 1

4 & 7

4 ^ 7

0 & 0xF

~0x00F0

8<<2

192>>4

3

4

3

0

0xFF0F

32

12

побитовое ИЛИ

побитовое И

побитовое исключающее ИЛИ

побитовое И

поразрядное дополнение (отрицание)

побитовый сдвиг влево

побитовый сдвиг вправо

Поразрядная операция ИЛИ, обозначаемая знаком|, выполняет операциюИЛИнад каждым индивидуальным битом двух своих операндов. В результате выполнения этой операции получается0, если в обоих разрядах записаны нули, и1во всех остальных случаях (логическое сложение). Например,10 | 7даст15, поскольку в двоичном виде10это1010,7– это111, соответственно операцияИЛИдает1111или15в десятичной системе (нули слева опущены).

Поразрядная операция И(&) выполняется над каждым битом своих операндов. В результате выполнения операции получается1, если в обоих разрядах стоит1, и0во всех остальных случаях (логическое умножение). В предыдущем примере10 & 7в результате даст2(10в двоичном виде).

Побитовое исключающее ИЛИ(^) в результате выпонения над каждым битом операндов даст1, если значения в разрядах разные, и0, если значения в разрядах совпадают (операцияXOR). Тот же пример10 ^ 7 даст 5(101в двоичном представлении).

Побитовое дополнение до единицы или побитовое отрицание – это унарная операция. В результате ее выполнения число в двоичном виде «инвертируется» - единицы становятся нулями и наоборот. Например, в результате операции ~7получится число-8. При хранении знаковых целых чисел крайний левый разряд резервируется под знак числа. Если в нем стоит0, то число положительное, а если1– отрицательное. Поэтому в результате побитового отрицания число поменяет знак.

На рис. 2.7 и 2.8 показано, как хранятся и как вычисляются отрицательные целые числа.

Рис. 2.7. Хранение отрицательных чисел

Рис. 2.8. Получение отрицательных чисел

Операция сдвига (<<- сдвиг влево или>>- сдвиг вправо) перемещает двоичное представление левого операнда на количество битов, соответствующее значению правого операнда. Например, двоичное представление короткого целого числа30000000000000011. Результатом операции3 << 2(сдвиг влево) будет двоичное число0000000000001100или, в десятичной записи,12. Аналогично, сдвинув число9(в двоичном виде0000000000001001) на2разряда вправо (записывается9 >> 2) получим0000000000000010, т.е.2.

При сдвиге влево число дополняется нулями справа. При сдвиге вправо бит, которым дополняется число, зависит от того, знаковое оно или беззнаковое. Для беззнаковых чисел при сдвиге вправо они всегда дополняются нулевым битом. Если же число знаковое, то значение самого левого бита числа используется для дополнения. Это объясняется тем, что самый левый бит как раз и является знаком — 0означает плюс и1означает минус. Таким образом, если

short x = 0xFF00;

unsigned short y = 0xFF00;

то результатом x >> 2будет0xFFC0(двоичное представление1111111111000000), а результатомy >> 2будет0x3FC0(двоичное представление0011111111000000).

Операция сдвига влево аналогична умножению на соответствующую степень двойки [19], а сдвиг влево – делению.