[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-ustroystvo-pk-i-seti-chto-takoe-pobitovye-operatsii":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":22,"progress":23,"seo":24},1154,"chto-takoe-pobitovye-operatsii",7,"ustroystvo-pk-i-seti","Устройство ПК и сети","🖥️","Что такое побитовые операции?","Побитовые (битовые) операции — это операции, которые выполняются над отдельными битами числа, а не над числом целиком. В Java они применяются к целочисленным типам (`int`, `long`, `byte`, `short`).\n\n> Аналогия: представьте ряд выключателей на стене. Побитовая операция AND — это проверка: «какие выключатели включены одновременно в обоих рядах?». OR — «включить выключатель, если он включён хотя бы в одном ряду».\n\n### Основные побитовые операции\n\n| Операция | Оператор (Java) | Описание | Пример (8 бит) |\n|----------|-----------------|----------|-----------------|\n| AND (И) | `&` | 1, только если оба бита = 1 | `1010 & 1100 = 1000` |\n| OR (ИЛИ) | `\\|` | 1, если хотя бы один бит = 1 | `1010 \\| 1100 = 1110` |\n| XOR (Исключающее ИЛИ) | `^` | 1, если биты различаются | `1010 ^ 1100 = 0110` |\n| NOT (НЕ) | `~` | Инвертирует все биты | `~1010 = 0101` |\n| Сдвиг влево | `\u003C\u003C` | Сдвигает биты влево, заполняя нулями | `0001 \u003C\u003C 3 = 1000` |\n| Арифметический сдвиг вправо | `>>` | Сдвигает вправо, сохраняя знаковый бит | `1000 >> 2 = 1110` (для отрицательных) |\n| Логический сдвиг вправо | `>>>` | Сдвигает вправо, заполняя нулями | `1000 >>> 2 = 0010` |\n\n### Практическое применение\n\n```java\n\u002F\u002F Проверка чётности числа\nboolean isEven = (n & 1) == 0;\n\n\u002F\u002F Установка бита в позиции pos\nint result = value | (1 \u003C\u003C pos);\n\n\u002F\u002F Сброс бита в позиции pos\nint result = value & ~(1 \u003C\u003C pos);\n\n\u002F\u002F Проверка бита в позиции pos\nboolean isSet = (value & (1 \u003C\u003C pos)) != 0;\n\n\u002F\u002F Умножение\u002Fделение на степень двойки\nint mul8 = n \u003C\u003C 3;   \u002F\u002F n * 8\nint div4 = n >> 2;   \u002F\u002F n \u002F 4\n\n\u002F\u002F Обмен значений без временной переменной (XOR swap)\na ^= b; b ^= a; a ^= b;\n\n\u002F\u002F Маски в правах доступа (битовые флаги)\nint READ = 1;    \u002F\u002F 001\nint WRITE = 2;   \u002F\u002F 010\nint EXEC = 4;    \u002F\u002F 100\nint perms = READ | EXEC; \u002F\u002F 101 — чтение и выполнение\n```\n\n### Применение в стандартной библиотеке Java\n\n+ `java.util.EnumSet` — внутри использует битовую маску для эффективного хранения множества enum-значений.\n+ `HashMap` — вычисление индекса бакета: `(n - 1) & hash` (побитовое AND вместо остатка от деления, работает для степеней двойки).\n+ Сетевые маски (IP): `255.255.255.0` = `11111111.11111111.11111111.00000000`.\n+ `java.util.BitSet` — коллекция для работы с множеством битов.\n\n### Вывод\n\nПобитовые операции работают с отдельными битами и используются для работы с флагами, масками, оптимизации арифметических операций и в алгоритмах хэширования. В повседневной Java-разработке чаще всего встречаются в контексте `HashMap`, `EnumSet` и работы с сетевыми масками.\n\n> **На собеседовании:** junior-вопрос. Чаще всего спрашивают: почему размер `HashMap` — степень двойки (чтобы использовать `(n-1) & hash` вместо `% n`), как работает `EnumSet` (битовая маска), и как проверить чётность через `& 1`. Умение объяснить разницу между `>>` и `>>>` — тоже хороший маркер.","","junior",[15,16,17,18,19,20,21],"сдвиг","OR","побитовые операции","AND","computer-fundamentals","XOR","битовые маски",[],null,{"title":25,"description":26,"ogTitle":27,"ogDescription":28,"keywords":29,"schemaAnswer":35,"featuredSnippetReady":36},"Побитовые операции в Java — AND, OR, XOR, сдвиги — Gymterview","Побитовые операции: & (AND), | (OR), ^ (XOR), ~ (NOT), \u003C\u003C >> >>> (сдвиги). Применение: проверка чётности, битовые маски, HashMap, EnumSet.","Побитовые операции — AND, OR, XOR, сдвиги в Java","& — AND, | — OR, ^ — XOR, ~ — NOT, \u003C\u003C — сдвиг влево, >> — арифметический сдвиг вправо, >>> — логический. Применение в HashMap, EnumSet, масках прав.",[30,31,32,33,34],"побитовые операции Java","AND OR XOR сдвиг","битовые маски Java","EnumSet побитовые операции","HashMap побитовые операции","Побитовые операции выполняются над отдельными битами числа. В Java: & (AND), | (OR), ^ (XOR), ~ (NOT), \u003C\u003C (сдвиг влево), >> (арифметический сдвиг вправо), >>> (логический сдвиг вправо). Применение: проверка чётности (n & 1), битовые маски прав доступа, индекс бакета в HashMap ((n-1) & hash), EnumSet.",true]