Ошибка в коде , не все значения подходят (с++)
Код пишет ошибку. Весь день ее ищу. Не все числа проходят правильно его решения. //a = 0 ≤ a < 2^32 //k = 0 ≤ k < 32)
#include <iostream>
int main() {
long long a;
int k;
std::cin >> a >> k;
unsigned int c;
std::cin >> c;
switch (c) {
case 1:
for (std::size_t i = 0; i < k; ++i) a &= ~(1 << i); //надо обнулить все биты
числа а до k-ого не включительно
std::cout << a;
break;
case 2:
a ^= (1 << k); std::cout << a; // надо инвертировать k-ый бит числа a
break;
case 3:
for (std::size_t i = k; i < 32; ++i) a &= ~(1 << i); // надо обнулить все биты
числа а начиная с k-ого
std::cout << a;
}
return 0;
}
(извините что так много вопросов по этому коду)
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Давайте уже закроем эту тему...
void doit(unsigned long a, unsigned long k, int c)
{
unsigned long mask = (unsigned long )-1;
mask >>= 32 - k;
switch(c)
{
case 1: a = a & ~mask; break;
case 2: a = a ^ (mask+1); break;
case 3: a = a & mask; break;
}
cout << a << endl;
}
Если хочется вычислять mask через цикл, то вместо
unsigned long mask = (unsigned long )-1;
mask >>= 32 - k;
пишем
unsigned long mask = 0;
for(int i = 0; i < k; ++i) mask = (mask << 1)|1;