В Java есть несколько побитовых операций, которые могут быть полезны при работе с битами двоичных чисел. Некоторые из них перечислены ниже:
- & (логическое И): возвращает бит 1 только в том случае, если оба операнда имеют значение 1, в противном случае возвращает 0.
- | (логическое ИЛИ): возвращает бит 1 только в том случае, если хотя бы один из операндов имеет значение 1, в противном случае возвращает 0.
- ^ (исключающее ИЛИ): возвращает бит 1 только в том случае, если только один из операндов имеет значение 1, в противном случае возвращает 0.
- ~ (унарный оператор НЕ): инвертирует значения всех битов операнда.
- << (левый сдвиг): сдвигает биты операнда влево на заданное количество позиций.
- >> (правый сдвиг с сохранением знака): сдвигает биты операнда вправо на заданное количество позиций, при этом знак операнда сохраняется.
- >>> (беззнаковый правый сдвиг): сдвигает биты операнда вправо на заданное количество позиций, при этом знак операнда не сохраняется.
Примеры:
Побитовый AND (&) - возвращает бит, который установлен в обоих операндах.
int a = 5;
int b = 3;
int c = a & b; // c будет равно 1
Побитовый OR (|) - возвращает бит, который установлен хотя бы в одном из операндов. Например:
int a = 5;
int b = 3;
int c = a | b; // c будет равно 7
Побитовый XOR (^) - возвращает бит, который установлен только в одном из операндов. Например:
int a = 5;
int b = 3;
int c = a ^ b; // c будет равно 6
Побитовый NOT (~) - инвертирует все биты операнда. Например:
int a = 5;
int b = ~a; // b будет равно -6
Сдвиг вправо (>>) - сдвигает биты операнда вправо на указанное число позиций. Например:
int a = 10;
int b = a >> 2; // b будет равно 2
Сдвиг влево (<<) - сдвигает биты операнда влево на указанное число позиций. Например:
int a = 10;
int b = a << 2; // b будет равно 40
Сдвиг вправо с заполнением нулями (>>>) - сдвигает биты операнда вправо на указанное число позиций, при этом заполняет освободившиеся позиции нулями. Например:
int a = -10;
int b = a >>> 2;
1606 вопрос-ответ по Java: https://github.com/DEBAGanov/interview_questions
Tелеграмм канал: https://t.me/DEBAGanov
Мое резюме: https://github.com/DEBAGanov