Условие:
Даны два числа 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;
}
Он почему=то вообще не меняет число, помогите, пожалуйста.
Надо использовать побитовые операции (<< и >>) и &, ^, |, ~.
N &= ~(0xFFFFFFFF << K);
Так даже лучше :) -
N &= ~(~0 << K);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Как можно сгенерировать случайную позицию для опорного элемента быстрой сортировки не используя функцию rand? Другие стратегии выбора не подходят...
При движении описанном в таком коде, игрок движется угловато: либо влево, либо вверх, либо вправо, либо вниз, ли по диагонали под углом 45 градусов...
В связи с решением одной задачи, в которой я из - за std::stoi получила TL, мне стало интересно - за сколько эта функция работает (в плане ассимптотики)Хотя...