Files
tasks-to-mdl/input/problems2.md
T
2026-09-14 19:26:07 +03:00

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);
    }
}