Я новичок в битовых манипуляциях.Мой друг недавно спросил меня об этом в интервью.Дан массив байтов, например: 1000100101010101 |001010011100 Нам нужно перевернуть два бита за раз по горизонтали.Таким образом, новый массив должен быть: 1000 |0101 и т. Д.
и т. Д.Я думаю, что мы начинаем с середины (отмеченной здесь) и продолжаем наш путь, взяв два бита за раз.Я знаю, как инвертировать отдельные биты в числе в одно и то же время:
unsigned int reverse(unsigned int num)
{
unsigned int x = sizeof(num) * 8;
unsigned int reverse_num = 0, i, temp;
for (i = 0; i < x; i++)
{
temp = (num & (1 << i));
if(temp)
reverse_num |= (1 << ((x - 1) - i));
}
return reverse_num;
}
Но мне интересно, как мы можем эффективно инвертировать два бита на месте.Заранее спасибо.