| — старший бит
0b11110000
| — младший бит
DEC BIN
0 0B00000000
1 0B00000001
2 0B00000010
3 0B00000011
4 0B00000100
5 0B00000101
6 0B00000110
7 0B00000111
Битовое И (&)
Если оба входных бита равны 1, результирующий бит равен 1, в ином случае бит равен 0.
byte a = 0b00111001; byte b = 0b11001100; byte x = a & b // 0b00001000
Битовое ИЛИ (|)
Результат операции побитового ИЛИ двух бит будет 1, если хотя бы один из этих битов 1, иначе бит будет равен 0.
byte a = 0b00111001; byte b = 0b11001100; byte x = a | b; // 0b11111101
Битовое XOR (^)
Результат операции побитового XOR двух бит будет равен 1, если хотя бы один из этих битов 1, и вернет 0, если оба бита будут равны 1.
byte a = 0b00111001; byte b = 0b11001100; byte x = a ^ b; // 0b11110101
Битовое НЕ (~)
Побитовое НЕ меняет каждый бит на противоположный: 0 становится 1, а 1 становится 0.
int a = 0b000111100111001; int x = ~a; // 0b111000011000110
Битовый сдвиг влево (<<)
Биты сдвинуться влево на указанную позицию.
int a = 0b000111100111001; int x = a << 3; // 0b111100111001000
Битовый сдвиг вправо (>>)
Биты сдвинуться влево на указанную позицию.
int a = 0b000111100111001; int x = c >> 3; // 0b000000111100111
Составное битовое И(&=)
Оператор составного побитового И (&=) работает аналогично побитовому И, полученный результат присваивается первому значению.
Оператор составного побитового И (&=) часто используют чтобы перевести отдельные биты переменной в низкий уровень (0).
Пример очистки байта а, сброс всех битов кроме 3-го:
byte a = 0b00001111; byte b = 0b00001000; // 0b00001000 a &= b; // a = a & b
Составное битовое ИЛИ (|=)
Оператор составного побитового ИЛИ (|=) работает аналогично побитовому ИЛИ, полученный результат присваивается первому значению.
Оператор составного побитового ИЛИ (|=) часто используют чтобы перевести отдельные биты переменной в высокий уровень (1).
Пример перевода 4-го бита в высокий уровень:
byte a = 0b00001111; byte b = 0b00010000; // 0b00011111 a |= b; // a = a | b
Запись единичного бита
byte a = 0b00000000; // запись лог. 1 в 6 бит byte x = a |= (1 << 6); // 0b01000000
byte a = 0b11111111; // запись лог. 0 в 6 бит byte x = a &= ~(1 << 6); // 0b10111111
byte a = 0b11111111; // инверсия 5 бита byte x = a ^= (1 << 5); // 0b11011111