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

109
21 апреля 2022, 22:40

Условие:

Даны два числа 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;
}

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

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

Answer 1
N &= ~(0xFFFFFFFF << K);

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

N &= ~(~0 << K);
READ ALSO
Проблема с виртуальными методами

Проблема с виртуальными методами

В ООП я новичокДошел до наследования

186
Как можно сгенерировать случайную позицию для опорного элемента быстрой сортировки не используя функцию rand?

Как можно сгенерировать случайную позицию для опорного элемента быстрой сортировки не используя функцию rand?

Как можно сгенерировать случайную позицию для опорного элемента быстрой сортировки не используя функцию rand? Другие стратегии выбора не подходят...

187
Движение игрока SFML

Движение игрока SFML

При движении описанном в таком коде, игрок движется угловато: либо влево, либо вверх, либо вправо, либо вниз, ли по диагонали под углом 45 градусов...

90
За какую ассимптотику работает std::stoi?

За какую ассимптотику работает std::stoi?

В связи с решением одной задачи, в которой я из - за std::stoi получила TL, мне стало интересно - за сколько эта функция работает (в плане ассимптотики)Хотя...

90