Упражнение 2-7. Напишите функцию invert(x,p,n), которая возвращает x с инвертированными n битами, начинающимися с позиции p (т. е. 1 превращается в 0 и наоборот), оставляя остальные без изменений.
#include <cstdio>
int invert(unsigned int x, int p, int n)
{
int inverted_x = ~x;
//gets rid of bits before position p
inverted_x = inverted_x << (p - 1);
inverted_x = inverted_x >> (p - 1);
//gets rids of bits after position p+n
inverted_x = inverted_x >> ((sizeof(x) * 8) - (p + n));
inverted_x = inverted_x << ((sizeof(x) * 8) - (p + n));
return inverted_x;
}
int main()
{
int a = 123;
printf("%d \n", invert(a, 2, 3));
}
Что я делаю неправильно?