Operació bit a bit: diferència entre les revisions
Contingut suprimit Contingut afegit
m robot estandarditzant mida de les imatges, localitzant i simplificant codi |
m Bot: Replace deprecated <source> tag and "enclose" parameter; canvis superficials |
||
Línia 2:
== Tipus d'operacions ==
Es poden distingir fins a tres tipus diferents d'operacions a nivell de bit:
# Operacions ''bit a bit'': Executen les operacions lògiques AND, OR, XOR, NOT, etc., sobre els bits individuals dels operands.
Línia 8:
# Operacions de ''rotació'': Roten els bits de l'operand cap a la dreta o cap a l'esquerra una o més posicions. Es pot, o no, usar el flag de [[ròssec (Aritmètica)|ròssec]] com un bit addicional en la rotació.
== Operacions bit a bit ==
=== NOT ===
El NOT bit a bit, o bitwise, o complement, és una [[operació unaria]] que realitza la [[negació lògica]] a cada bit, invertint els bits del nombre, de tal manera que els zeros es converteixen en 1 i viceversa. Per exemple:
Línia 20:
=== AND ===
El AND bit a bit, o bitwise, presa dos nombres enters i realitza l'operació [[Conjunció lògica
0101 (decimal 5)
Línia 29:
=== OR ===
Una operació OR de bit a bit, o bitwise, presa dos nombres enters i realitza l'operació [[Disjunció lògica
0101
Línia 37:
=== XOR ===
El XOR bit a bit, o bitwise, presa dos nombres enters i realitza l'operació [[Disjunció exclusiva
0101
Línia 52:
=== Desplaçaments de bits ===
Els desplaçaments de bit (bitshifts) són de vegades considerats operacions bit a bit, perquè operen en la representació binària d'un nombre enter en lloc de sobre el seu valor numèric, però, els desplaçaments de bits no operen en parells de bits corresponents, i per tant no poden ser anomenats pròpiament com "bit a bit" (bit d'adreça). En aquestes operacions els dígits (bits) són moguts, o desplaçats, cap a l'esquerra o cap a la dreta. Els [[Registre (maquinari)
==== Desplaçament lògic ====
Línia 91:
===== Multiplicació i divisió per 2<sup>n</sup>, d'enters sense signe =====
En [[nombre enter
Els programadors de llenguatge assemblador usen aquesta propietat per fer multiplicacions i divisions ràpides, d'enters sense signe, per una potència de 2, on n desplaçaments equivalen a multiplicar o dividir per 2<sup>n</sup>. També, si el processador no té operacions de multiplicació i divisió d'enters, o si aquestes són molt lentes, es pot multiplicar o dividir usant desplaçaments i sumes per multiplicar i desplaçaments i restes per dividir. Per exemple, per multiplicar un enter per 10, es procedeix de la manera següent (en el llenguatge assemblador del x86):
Línia 99:
En les instruccions de sota, EAX i EBX són registres del processador, SHL (shift left), desplaça el registre indicat una posició (un bit) cap a l'esquerra (que equival a multiplicar per 2), MOV copia el registre de la dreta sobre el registre de l'esquerra, i ADD afegeix el registre de la dreta al registre de l'esquerra.
<
SHL EAX, 1; EAX = EAX * 2 EAX = 2n, desplaça a l'esquerra el contingut del registre EAX una posició,
; (Multiplica EAX per 2)
Línia 107:
ADD EAX, EBX; EAX = EAX + EBX EAX = 2n + 8n = 10n; suma EBX (8n) a EAX (2n),
; (Ara EAX té el valor original multiplicat per 10)
</syntaxhighlight>
==== Desplaçament aritmètic ====
[[Fitxer: Rotate left logically.svg |miniatura| Desplaçament aritmètic cap a l'esquerra]]
[[Fitxer: Rotate right arithmetically.svg |miniatura| Desplaçament aritmètic cap a la dreta]]
Els desplaçaments aritmètics són similars als desplaçaments lògics, només que els aritmètics estan pensats per treballar sobre nombres enters amb signe en representació de [[complement a dos]] en lloc d'enters sense signe. Els desplaçaments aritmètics permeten la multiplicació i la divisió per dos, de nombres enters amb signe, per una potència de dos. Desplaçar n bits cap a l'esquerra o a la dreta equival a multiplicar o dividir per 2 <sup> n </sup>, (assumint que el valor no fa [[Desbordament aritmètic
El desplaçament aritmètic a l'esquerra és exactament igual al desplaçament lògic cap a l'esquerra. De fet són dos noms diferents per exactament la mateixa operació. En desplaçar els bits una posició cap a l'esquerra és equivalent a una multiplicació per 2 independentment de si és un nombre enter amb signe o sense signe. En els processadors x86, el [[assemblador]] té dos pnemònics per al desplaçament lògic i l'aritmètic cap a l'esquerra, però quan el programa és ensamblat, només hi ha un opcode per tots dos a les instrucció en [[llenguatge de màquina]].
Línia 138:
[[Fitxer: Rotate left through carry.svg |miniatura| Rotació cap a l'esquerra a través del bit de ròssec]]
[[Fitxer: Rotate right through carry.svg |miniatura| Rotació cap a la dreta a través del bit de ròssec]]
== Operacions de
=== Rotació ===
Línia 150:
Si es fixa el flag del implico per endavant, una rotació simple a través del implico pot simular un desplaçament lògic o aritmètic d'una posició. Per exemple, si el flag del implico conté 0, després d'una rotació cap a la dreta a través del flag de l'implico, equival a un desplaçament lògic cap a la dreta, i si el flag del ròssec conté una còpia del bit del signe, equival a un desplaçament aritmètic cap a la dreta. Per això, alguns microcontroladors com ara els [[PIC (microcontrolador)|PIC]] només tenen les funcions de girar i girar a través de l'implico, i no es preocupen de tenir instruccions de desplaçament aritmètic o lògic.
Rotar a través del implico és especialment útil quan es fan desplaçaments en nombres més grans que la mida natiu de la [[Paraula (informàtica)
== Vegeu també ==
|