Bit Twiddle per eseguire questa conversione
-
03-07-2019 - |
Domanda
curioso di sapere se qualcuno potrebbe avere un'idea di come farei quanto segue a un numero binario:
converti
01+0 -> 10+1 (+ as in regular expressions, one or more)
01 -> 10
10 -> 01
così,
10101000010100011100
01010100101010100010
e per chiarire che questa non è una semplice inversione:
000000100000000000
000001010000000000
Stavo pensando a regex, ma sto lavorando con numeri binari e voglio rimanere così. La pagina hack di twiddling sui bit non mi ha fornito alcuna informazione. Questo ha chiaramente qualche essenza di automi cellulari. Quindi, qualcuno ha un po 'di operazioni che possono occuparsene? (non è necessario alcun codice, so come farlo).
Soluzione
Supponiamo che x sia la tua variabile. Quindi avresti:
unsigned myBitOperation(unsigned x)
{
return ((x<<1) | (x>>1)) & (~x);
}
Altri suggerimenti
Twidle in C / C ++ è ~
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow