4.6 KiB
Задачи по побитовым операциям на Java
Условие: без использования операторов выбора (
if,switch,?:), циклов (for,while,do) и объявления новых функций. Толькоmain, побитовые операции, арифметика иSystem.out.println.
Задача 1. Умножить число на 4 без умножения
Условие: Дано целое число n. Получить n * 4, используя только побитовые операции.
| Ввод: | Вывод: |
|---|---|
| 5 | 20 |
Решение:
public class Task1 {
public static void main(String[] args) {
int n = 5;
int result = n << 2; // сдвиг влево на 2 = умножение на 4
System.out.println(result);
}
}
Задача 2. Разделить число на 2 без деления
Условие: Дано целое число n. Получить n / 2, используя только побитовые операции.
| Ввод: | Вывод: |
|---|---|
| 20 | 10 |
Решение:
public class Task2 {
public static void main(String[] args) {
int n = 20;
int result = n >> 1; // сдвиг вправо на 1 = деление на 2
System.out.println(result);
}
}
Задача 3. Проверить, чётное ли число
Условие: Дано целое число n. Вывести 1, если оно чётное, и 0, если нечётное.
| Ввод: | Вывод: |
|---|---|
| 7 | 0 |
Решение:
public class Task3 {
public static void main(String[] args) {
int n = 7;
int result = (n & 1) ^ 1; // если младший бит 1 → 0, иначе → 1
System.out.println(result);
}
}
Задача 4. Обнулить младший бит
Условие: Дано целое число n. Обнулить его самый младший установленный бит.
| Ввод: | Вывод: |
|---|---|
| 12 | 8 |
Решение:
public class Task4 {
public static void main(String[] args) {
int n = 12;
int result = n & (n - 1); // трюк: убирает младший установленный бит
System.out.println(result);
}
}
Задача 5. Установить k-й бит в 1
Условие: Даны число n и позиция k (нумерация с 0). Установить k-й бит в 1.
| Ввод: | Вывод: |
|---|---|
| 8 2 | 12 |
Решение:
public class Task6 {
public static void main(String[] args) {
int n = 8; // 1000
int k = 2;
int result = n | (1 << k); // 1000 | 0100 = 1100 = 12
System.out.println(result);
}
}
Задача 6. Инвертировать k-й бит
Условие: Даны число n и позиция k. Инвертировать k-й бит.
| Ввод: | Вывод: |
|---|---|
| 10 1 | 8 |
Решение:
public class Task7 {
public static void main(String[] args) {
int n = 10; // 1010
int k = 1;
int result = n ^ (1 << k); // 1010 ^ 0010 = 1000 = 8
System.out.println(result);
}
}
Задача 7. Умножить число на 5 без умножения
Условие: Дано целое число n. Получить n * 5, используя только сдвиги и сложение.
| Ввод: | Вывод: |
|---|---|
| 7 | 35 |
Решение:
public class Task10 {
public static void main(String[] args) {
int n = 7;
int result = (n << 2) + n; // 4n + n = 5n
System.out.println(result);
}
}
Задача 8. Умножить число на 3 без умножения
Условие: Дано целое число n. Получить n * 3, используя только сдвиги и сложение.
| Ввод: | Вывод: |
|---|---|
| 7 | 21 |
Решение:
public class Task10 {
public static void main(String[] args) {
int n = 7;
int result = (n << 1) + n; // 2n + n = 3n
System.out.println(result);
}
}