# Desplaçador circular

En matemàtiques combinatòries, un desplaçament circular és l'operació de reordenar les entrades en una tupla, ja sigui movent l'entrada final a la primera posició, mentre que totes les altres entrades es mouen a la següent posició, o bé fent l'operació inversa. Un desplaçament circular és un tipus especial de permutació cíclica, que al seu torn és un tipus especial de permutació. Formalment, un desplaçament circular és una permutació σ de les n entrades de la tupla de manera que
    $\sigma (i)\equiv (i+1)$ mòdul n, per a totes les entrades i = 1,... , n
    o
       $\sigma (i)\equiv (i-1)$ mòdul n, per a totes les entrades i = 1,... , n. El resultat d'aplicar repetidament desplaçaments circulars a una tupla donada també s'anomenen desplaçaments circulars de la tupla.
    Per exemple, l'aplicació repetida de desplaçaments circulars a la quatre-tuple (a, b, c, d ) dona successivament
   * Matrius de desplaçaments circulars de 8 elements cap a l'esquerra i la dreta( d, a, b, c ),
   * (c, d, a, b ),
   * (b, c, d, a ),
   * (a, b, c, d ) (la quatre-tuple original),
i llavors la seqüència es repeteix; per tant, aquesta quatre tuple té quatre desplaçaments circulars diferents. Tanmateix, no totes les n -tuples tenen n desplaçaments circulars diferents. Per exemple, la tupla 4 (a, b, a, b ) només té 2 desplaçaments circulars diferents. El nombre de desplaçaments circulars diferents d'una n -tupla és ${\frac {n}{k}}$, on k és un divisor de n, que indica el nombre màxim de repeticions en tots els subpatrons.
En la programació d'ordinadors, una rotació per bits, també coneguda com a desplaçament circular, és una operació per bits que desplaça tots els bits del seu operand. A diferència d'un desplaçament aritmètic, un desplaçament circular no conserva el bit de signe d'un nombre ni distingeix l'exponent d'un nombre de coma flotant del seu significat. A diferència d'un desplaçament lògic, les posicions de bits vacants no s'emplenen amb zeros, sinó que s'omplen amb els bits que s'han desplaçat fora de la seqüència.

## Implementació de desplaçament circulars

Els desplaçaments circulars s'utilitzen sovint en criptografia per tal de permutar seqüències de bits. Malauradament, molts llenguatges de programació, inclòs C, no tenen operadors ni funcions estàndard per al desplaçament circular, tot i que pràcticament tots els processadors tenen instruccions d'operació per bits (per exemple, Intel x86 té ROL i ROR). Tanmateix, alguns compiladors poden proporcionar accés a les instruccions del processador mitjançant funcions intrínseques. A més, algunes construccions del codi ANSI C estàndard poden ser optimitzades per un compilador per a la instrucció del llenguatge assemblador "rotar" a les CPU que tenen aquesta instrucció. La majoria dels compiladors C reconeixen l'idioma següent i el compilen en una única instrucció de rotació de 32 bits.

## Exemple

Si la seqüència de bits 0001 0111 estigués sotmesa a un desplaçament circular d'una posició de bit... (veure imatges a continuació)
| a l'esquerra donaria: 0010 1110 Desplaçament circular a l'esquerra. | a la dreta donaria: 1000 1011. Desplaçament circular a la dreta. |
Si la seqüència de bits 1001 0110 estigués sotmesa a les operacions següents:
| desplaçament circular a l'esquerra d'1 posició: | 0010 1101 |
| desplaçament circular a l'esquerra de 2 posicions: | 0101 1010 |
| desplaçament circular a l'esquerra de 3 posicions: | 1011 0100 |
| desplaçament circular a l'esquerra de 4 posicions: | 0110 1001 |
| desplaçament circular a l'esquerra de 5 posicions: | 1101 0010 |
| desplaçament circular a l'esquerra de 6 posicions: | 1010 0101 |
| desplaçament circular a l'esquerra de 7 posicions: | 0100 1011 |
| desplaçament circular a l'esquerra de 8 posicions: | 1001 0110 |
| desplaçament circular a la dreta d'1 posició: | 0100 1011 |
| desplaçament circular a la dreta de 2 posicions: | 1010 0101 |
| desplaçament circular a la dreta de 3 posicions: | 1101 0010 |
| desplaçament circular a la dreta de 4 posicions: | 0110 1001 |
| desplaçament circular a la dreta de 5 posicions: | 1011 0100 |
| desplaçament circular a la dreta de 6 posicions: | 0101 1010 |
| desplaçament circular a la dreta de 7 posicions: | 0010 1101 |
| desplaçament circular a la dreta de 8 posicions: | 1001 0110 |

## Referències

* ↑ «Shift and rotate bits - Online Tools» (en anglès). [Consulta: 14 gener 2024].
* ↑ «Circular Bit Shift - Online Decoder, Encoder, Solver, Translator» (en anglès). [Consulta: 14 gener 2024].
* ↑ «Shift Micro-Operations in Computer Architecture» (en anglès americà), 08-10-2020. [Consulta: 14 gener 2024].
* ↑ «Bitwise rotation (circular shift)» (en anglès). [Consulta: 14 gener 2024].