
РЕШИТЕ ЗАДАЧУ ПО С++ ДАЮ 25 БАЛЛОВ!!!!!! Условие Даны два числа N и K. Требуется изменить число N
так, чтобы в K-м бите этого числа в двоичной системе счисления стоял ноль, а все остальные разряды остались неизменными. В задаче запрещено использовать арифметические операции +, -, *, / и %, а также операторы if / switch и тернарную операцию. Формат входных данных В одной строке вводятся два целых числа N и K (0 ⩽ K ⩽ 30, 0 ⩽ N < 231). Разряды нумеруются от младшего к старшему начиная с нуля. Формат выходных данных Требуется вывести одно целое число — ответ на задачу. входные данные 21 1 21 2 выходные данные 21 17

Ответы на вопрос

Код в приложении.
Пояснения:
Посмотрим, как же нам решить задачу. Сначала, поймём как обнулить бит. Бит можно обнулить если использовать логическое И с нулём. Значит, нам нужно использовать логическое И на нужном бите. Как же это сделать? В С++ есть побитовые операции между двумя числами, но побитовое И (&) применяется между всеми битами двух чисел, т.е.
Заметим, что
Числа в С++ с фиксированной разрядностью, т.е. битов всегда определённое кол-во. Исходя из условий задачи, тут нужен int - 32-битный тип.
Тогда, чтобы обнулить нужный бит, нам нужно использовать побитовое И с таким числом, что все его биты, кроме нужного, равны 1.
Добиться этого мы сможем следующим образом. Сдвинем 1 влево на k бит и получим такое число, что все биты, кроме k-го равны 0, а k-ый равен 1, и используем побитовую инверсию (~), т.е. инвертируем каждый бит в числе.
Получив нужное число, выполняем побитовое И и обнуляем k-ый бит.
Как работают примеры:
И второй пример:




Для решения этой задачи можно использовать битовые операции. Мы можем создать маску, в которой все биты будут равны 1, за исключением K-го бита, который будет равен 0. Затем мы можем использовать операцию XOR между исходным числом N и этой маской, чтобы установить K-й бит в 0, а все остальные биты оставить неизменными.
Вот пример кода на C++ для решения этой задачи:
cpp#include <iostream>
int main() {
int N, K;
std::cin >> N >> K;
// Создаем маску, в которой только K-й бит равен 0
int mask = ~(1 << K);
// Применяем маску к числу N с помощью операции XOR
int result = N & mask;
std::cout << result << std::endl;
return 0;
}
С этим кодом, когда вы вводите, например, "21 1", он изменит число 21 так, чтобы второй бит был равен 0, и выведет результат, который равен 17, как указано в вашем примере выходных данных.


Похожие вопросы
Топ вопросов за вчера в категории Информатика







Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili