Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
49
Добавлен:
12.05.2015
Размер:
1.82 Mб
Скачать

Глава 4. Операции 91_

00101010 (42) & 00001111 (15)

00001010 (10)

Поразрядное ИЛИ

Операция поразрядного ИЛИ (|) комбинирует биты так, что, если хотя бы один (любой) из битов в операндах равен 1, то результирующий бит тоже 1, например:

00101010 (42) I 00001111 (15)

00101111 (47)

Поразрядное исключающее ИЛИ

Операция поразрядного исключающего ИЛИ (А) комбинирует биты так, что, если только один операнд есть 1, то и результат есть 1. Иначе, результат ну­левой. Следующий пример показывает эффект операции л. Этот пример де­монстрирует также одно полезное свойство операции исключающего ИЛИ. Обратите внимание, что комбинация двоичных разрядов числа 42 инверти­рована везде, где второй операнд 1, а где второй операнд 0, биты первого операнда остаются без изменения. При выполнении некоторых типов раз­рядных манипуляций вы найдете это свойство весьма полезным.

00101010 (42) л 00001111 (15)

00100101 (37)

Использование поразрядных логических операций

Следующая программа демонстрирует поразрядные логические операции:

// Демонстрирует поразрядные логические операции, class BitLogic {

public static void main(String args[]) { String binary[] = (

"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111" };

int a = 3; //0 + 2 + 1 или ООН в двоичной форме int b=6; //4+2 + 0 или ОНО в двоичной форме int с = а ! b; int d = а & b;

j?Ј Часть I. Язык Java

int e = а л b;

int f = (~a & b) I (a & ~b) ;

int g = ~a & OxOf;

System.out.println(" a = " + binaryfa])

System.out.println(" b = " + binary[b])

System.out.println(" a|b = " + binary[c])

System, out.println(" a&b = " + binary[d])

System.out.println(" алЬ = " + binaryfe])

System.out.println("~a&bIa&~b = " + binaryff])

System.out.println(" ~a = " + binarytg])

В этом примере целые переменные а и ь содержат числа (3 и 6), битовые образы которых хранят (в младших разрядах) четыре возможные комбина­ции двух бинарных цифр 0-0, 0-1, 1-1 и 1-0. Можно видеть, как операции |, & и Л, работая на каждом бите а и ь, размещают результаты в переменных с, d и е. Значение переменной f формирует выражение <~а & b) l (а & ~ь>, использующее все допустимые поразрядные операции. Битовые значения, присвоенные переменным е и f, одинаковы. Массив с именем binary содержит строки с двоичными представлениями чисел от 0 до 15. Массив построен так, чтобы элемент binary [п] хранил правильное строковое пред­ставление бинарного значения индекса п. Выражение ~а & OxOf (где шест-надцатеричная константа OxOf в бинарной форме представляется как 0000 1111) вычисляется уменьшением своего значения до величины мень­шей, чем 16, так чтобы это значение можно было напечатать при помощи массива binary. Вывод этой программы:

а = ООН

b = ОНО

а|Ь = 0111

а&Ь = 0010

аЛЬ = 0101

~a&b|a&~b = 0101

~а = 1100

Левый сдвиг

Операция левого сдвига («) смещает все биты значения влево на указанное количество разрядов. Она имеет следующую общую форму:

value « лит

где питопределяет число позиций левого сдвига значения в value. To есть « сдвигает все биты в указанном значении влево на число разрядных позиций.

Соседние файлы в папке JavaLit