Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LR2.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
226 Кб
Скачать
☆

Целочисленные битовые операторы

Для целых числовых типов данных - long, int, short, char и byte, определен дополнительный набор операторов, с помощью которых можно проверять и модифицировать состояние отдельных битов соответствующих значений. В таблице приведена сводка таких операторов. Операторы битовой арифметики работают с каждым битом как с самостоятельной величиной.

Оператор

Результат

Оператор

Результат

~

побитовое унарное отрицание (NOT)

 

 

&

побитовое И (AND)

&=

побитовое И (AND) с присваиванием

|

побитовое ИЛИ (OR)

|=

побитовое ИЛИ (OR) с присваиванием

^

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

^=

побитовое исключающее ИЛИ (XOR) с присваиванием

>>

сдвиг вправо

>> =

сдвиг вправо с присваиванием

>>>

сдвиг вправо с заполнением нулями

>>>=

сдвиг вправо с заполнением нулями с присваиванием

<<

сдвиг влево

<<=

сдвиг влево с присваиванием

Пример программы, манипулирующей с битами

В таблице, приведенной ниже, показано, как каждый из операторов битовой арифметики воздействует на возможные комбинации битов своих операндов. Приведенный после таблицы пример иллюстрирует использование этих операторов в программе на языке Java.

А

В

OR

AND

XOR

NOT A

0

0

0

0

0

1

1

0

1

0

1

0

0

1

1

0

1

1

1

1

1

1

0

0

public class Bitlogic {

public static void main(String args []) {

String binary[] = { "OOOO", "0001", "0010",

"0011", "0100", "0101",

"0110", "0111", "1000",

"1001", "1010", "1011",

"1100", "1101", "1110",

"1111" };

int a = 3; // 0+2+1 или двоичное 0011

int b = 6; // 4+2+0 или двоичное 0110

int c = a | b;

int d = a & b;

int e = a ^ b;

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

int g = ~a & 0x0f;

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

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

System.out.println(" ab = " + binary[c]);

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

System.out.println(" a^b = " + binary[e]);

System.out.println("~a&b|а^~Ь = " + binary[f]);

System.out.println(" ~a = " + binary[g]);

}

}

Сдвиги влево и вправо

Оператор Оператор “>>” означает в языке Java сдвиг вправо. Он перемещает все биты своего левого операнда вправо на число позиций, заданное правым операндом. Когда биты левого операнда выдвигаются за самую правую позицию слова, они теряются. При сдвиге вправо освобождающиеся старшие (левые) разряды сдви-гаемого числа заполняются предыдущим содержимым знакового разряда. Такое поведение называют расширением знакового разряда.

В следующей программе байтовое значение преобразуется в строку, содержащую его шестнадцатиричное представление. Обратите внимание - сдвинутое значение приходится маскировать, то есть логически умножать на значение 0х0f, для того, чтобы очистить заполняемые в результате расширения знака биты и по-низить значение до пределов, допустимых при индексировании массива шестнадцатиричных цифр.

public class HexByte {

static public void main(String args[]) {

char hex[] = { '0', '1', '2', '3', '4', '5', '6',

'7', '8', '9', 'a', 'b', 'c', 'd',

'e', 'f' };

byte b = (byte) 0xf1;

System.out.println("b = 0x" + hex[(b >> 8) & 0x0f] +

hex[b & 0x0f]);

}

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]