Ошибка в простейшем алгоритме

Нужно обнулить последние биты даного числа n. 0<=n<=2^31. Вводиться n, само число биты которого нужно обнулить, потом k, оно показывает сколько бит с конца обнулять. 0<=k<=30. Нельзя использовать циклы. Написал, но никак не хочет проходить 6 тестов из 50.

#include <iostream>

using namespace std;

int main() {
    long long n, k, L = 4294967295, f = 0, S = 0;
    cin >> n >> k;
    if (k == 1) f = 1;
    else {
        S = (1 - (2 << (k - 1))) / (-1);
    }
    L -= S+f;
    cout << (L&n);
}

Использовал методику геометрической прогресии, чтобы сделать k нулей в числе L, а потом просто применил к даному числу, и к числу с вырезанными нужными нулями операцию &. Незнаю, почему не проходит 2 теста. Значительно повышал число L, но не в этом дело.


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

Автор решения: Zhihar
unsigned int mask = 0xFFFFFFFF >> k;
unsigned int res = n & mask

это если надо биты обнулять не у числа, а у ячейки памяти (4 бита) в котором оно хранится

→ Ссылка
Автор решения: EOF
#include <iostream>

using namespace std;

int main()
{
    unsigned long input;
    int bits;

    cin >> input >> bits;

    input >>= bits; // Убираем все нужные биты
    input <<= bits; // Возвращаем на их место нули

    cout << input << endl;

    return 0;
}
→ Ссылка