Как решить задачу ?(на биты)

Задача

Надо решить данную задачу. Я пытался это сделать своими знаниями, но не получилось. (Снизу будет макет кода) Что надо добавить, чтобы задача решалась?

#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;
}
→ Ссылка