Bit Twiddle для выполнения этого преобразования - PullRequest
2 голосов
/ 01 октября 2008

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

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

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

так

10101000010100011100
01010100101010100010

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

000000100000000000
000001010000000000

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

Ответы [ 2 ]

11 голосов
/ 01 октября 2008

Скажем, х ваша переменная. Тогда у вас будет:

unsigned myBitOperation(unsigned x)
{
    return ((x<<1) | (x>>1)) & (~x);
}
0 голосов
/ 01 октября 2008

Twidle в C / C ++ составляет ~

...