Помогите решить задачу по c++ пж

Условие:

Даны два числа N и K. Требуется изменить число N так, чтобы в его двоичном представлении K младших разрядов остались неизменными, а все остальные были заменены на 0.

В задаче запрещено использовать арифметические операции +, -, *, / и %, а также операторы if / switch и тернарную операцию.

Формат входных данных

В одной строке вводятся два целых числа N и K (1 ⩽ K ⩽ 30, 0 ⩽ N < 231). Разряды нумеруются от младшего к старшему начиная с нуля.

Формат выходных данных

Требуется вывести одно целое число — ответ на задачу.

Пример:

входные данные: 1023 5

выходные данные: 31

Мой код:

#include <iostream>

using namespace std;

int main() {
    int a, b, c, d, x;
    cin >> a >> b;
    c = 1 << b;
    c = c | ~c;
    d = a & c;
    cout << d;
    return 0;
}

Он почему=то вообще не меняет число, помогите, пожалуйста.

Надо использовать побитовые операции (<< и >>) и &, ^, |, ~.


Ответы (1 шт):

Автор решения: Harry
N &= ~(0xFFFFFFFF << K);

Так даже лучше :) -

N &= ~(~0 << K);
→ Ссылка