Бит Twiddle для выполнения этого преобразования

StackOverflow https://stackoverflow.com/questions/158209

  •  03-07-2019
  •  | 
  •  

Вопрос

любопытно, может ли кто-нибудь понять, как я могу сделать следующее с двоичным числом:

конвертировать

   01+0 -> 10+1 (+ as in regular expressions, one or more)
    01 -> 10  
    10 -> 01  

так,

10101000010100011100
01010100101010100010

и чтобы уточнить, что это не простая инверсия:

000000100000000000
000001010000000000

Я думал о регулярном выражении, но я работаю с двоичными числами и хочу продолжать в том же духе.А немного запутанных хаков страница тоже не дала мне никакой информации.В этом явно есть некая сущность клеточных автоматов.Итак, у кого-нибудь есть несколько битовых операций, которые могут с этим справиться?(код не нужен, я знаю, как это сделать).

Это было полезно?

Решение

Допустим, x — ваша переменная.Тогда у вас будет:

unsigned myBitOperation(unsigned x)
{
    return ((x<<1) | (x>>1)) & (~x);
}

Другие советы

Twidle в C/C++ равен ~

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top