Как решить задачу ?(на биты)
Надо решить данную задачу. Я пытался это сделать своими знаниями, но не получилось. (Снизу будет макет кода) Что надо добавить, чтобы задача решалась?
#include <iostream>
#include <bitset>
int main()
{
long long a;
int k;
std::cin >> a >> k;
int c;
std::cin >> c;
if (c == 1) {
std::bitset <64> A(a);
int x = A.size();
A.reset(x - k); //я думал надо выесть чтобы получить числа ДО
a = A.to_ullong();
std::cout << a;
}
else if (c == 2) {
std::bitset <64> A(a);
int x = A.size();
A.flip(k);// я думал инвертировать, НО что то не так.
a = A.to_ullong();
std::cout << a;
}
else if (c == 3) {
std::bitset <64> A(a);
int x = A.size();
A.reset(...); // здесь вообще не понимаю
a = A.to_ullong();
std::cout << a;
}
}
Ответы (2 шт):
Автор решения: isnullxbh
→ Ссылка
обнулите все биты числа a до k не включительно
for (std::size_t i = 0; i < k; ++i) a &= ~(1 << i);
инвертируйте k-ый бит числа a
a ^= (1 << k);
обнулите все биты числа a начиная с k-ого
for (std::size_t i = k; i < 32; ++i) a &= ~(1 << i);
Автор решения: Виктор
→ Ссылка
Вариант реализации:
int main()
{
unsigned long a;
int k, с;
std::cin >> a >> k;
std::cin >> c;
if (c == 1) {
a &= ( (unsigned long)-1 >> (32-k));
}
else if (c == 2) {
a ^= (1 << k);
}
else if (c == 3) {
a &= ( (unsigned long)-1 << k);
}
std::cout << a << endl;
}
