Бит Twiddle для выполнения этого преобразования
-
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++ равен ~
Не связан с StackOverflow