Operador a nivell de bits
Una operació bit a bit o bitwise opera sobre número binario a nivell dels seus bits individuals. És una acció primitiva ràpida, soportada directament pels processadorés. En processadors simples de baix cost, les operacions de bit a bit, junt en els de adició i substracció, són típicament substancialment més ràpides que la multiplicació i la divisió, mentres que en els moderns processadors d'alt rendiment usualment les operacions es realisen casi a la mateixa velocitat.
Tipos d'operacions
[editar | editar còdic]- Operacions bit a bit: Eixecuten les operacions llògiques AND, OR, XOR, NOT, etc, sobre els bits individuals dels operants.
- Operacions de desplaçament: Desplacen els bits dels operants cap a la dreta o cap a l'esquerra una o més posicions.
- Operacions de rotació: Rotan els bits de l'operant cap a la dreta o cap a l'esquerra una o més posicions. Poden usar o no el flag del carrege com un bit adicional en la rotació.
Operadors bit a bit
[editar | editar còdic]En les explicacions d'avall, qualsevol indicació d'una posició d'un bit és contada de dreta a esquerra a partir del bit menys significatiu. Per eixemple, el valor binario 0001 (el decimal 1) té zeros en cada posició llevat en la primera.
NOT
[editar | editar còdic]| A | NOT A |
| 0 | 1 |
| 1 | 0 |
El NOT bit a bit, o bitwise, o complement, és una operació unaria que realisa la negació llògica en cada bit, invertint els bits del número, de tal manera que els zeros es convertixen en 1 i viceversa. Per eixemple:
NOT 10011 = 01100
- El NOT forma el complement a un d'un valor binario dau.
- En un número entero en signe en complement a dos, el NOT dona com resultat l'invers aditiu del número menys 1, és dir
NOT x = -x - 1. Per a obtindre el complement a dos d'un número, es deu sumar 1 al resultat, donant el negatiu del número. Açò equival a un canvi de signe del número: +5 es convertix en -5, i -5 es convertix en +5. - Per als sancers sense signe, el complement bit a bit és la “reflexió d'espill” del número a través del punt mig del ranc del sancer. Per eixemple, per als sancers sense signe de 8 bits,
NOT x = 255 - x, per als sancers sense signe de 16 bits,NOT x = 65535 - x, i en general, per als sancers sense signe de n bits,NOT x = (2n - 1) - x.
AND
[editar | editar còdic]| A | B | A AND B |
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
El AND bit a bit, o bitwise, pren dos número entero i realisa l'operació AND llògica en cada parell corresponent de bits. El resultat en cada posició és 1 si el bit corresponent dels dos operants és 1, i 0 de lo contrari, per eixemple:
0101 AND 0011 = 0001
El AND pot ser usat per a filtrar determinats bits, permetent que uns bits passen i els atres no. També pot usar-se en sistemes de major fiabilitat.
Determinant l'estat de bits
[editar | editar còdic]El AND pot ser usat per a determinar si un bit particular està encés (1) o apagat (0). Per eixemple, donat un patró de bits 0011, per a determinar si el segon bit està encés s'usa una operació AND en una caraça que conté encés solament el segon bit, que és el que es vol determinar:
0011 AND 0010 (caraça) = 0010
ya que el resultat 0010 és diferent de zero, se sap que el segon bit en el patró original està encés. Açò és a sovint cridat emmaixquerament del bit (bit masking). (Per analogia, a l'us de les cintes d'emmaixquerar, que cobrixen o emmaixqueren porcions que no deuen ser alterades o porcions que no són d'interés. En este cas, els valors 0 emmaixqueren els bits que no són d'interés).
Extraent bits
[editar | editar còdic]El AND es pot usar per a extraure determinats bits d'un valor. Si en un byte, per eixemple, tenim representats dos dígits hexadecimaels empaquetats, (un en els 4 bits superiors i l'atre en els 4 bits inferiors), podem extraure cada dígit hexadecimal usant el AND en les caraces adequades:
0011 0101 0011 0101 AND 1111 0000 (caraça) AND 0000 1111 (caraça) = 0011 0000 = 0000 0101 Hex. superior Hex. inferior
Apagant bits
[editar | editar còdic]El AND també es pot usar per a apagar determinats bits. Solament cal posar una caraça en bits en zero en les posicions dels bits que es volen apagar i 1 en els demés bits. Tots els demés bits en la caraça 1 passaran inalterados, i els que tenen la caraça 0 s'apagaran. Donat l'eixemple 0111, el segon bit pot ser apagat usant un AND en el patró que té un zero en el segon bit i un 1 en el restant dels bits:
0111 AND 1101 (caraça) = 0101
OR
[editar | editar còdic]| A | B | A OR B |
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
Una operació OR de bit a bit, o bitwise, pren dos número entero i realisa l'operació OR inclusivo en cada parell corresponent de bits. El resultat en cada posició és 1 si el bit corresponent de qualsevol dels dos operants és 1, i 0 si abdós bits són 0, per eixemple:
0101 OR 0011 = 0111
Encenent bits
[editar | editar còdic]El OR bit a bit, o bitwise, pot ser usat per a encendre un bit individual o un conjunt de bits. Per a això s'usa una caraça OR en els bits que es volen encendre en 1 i el restant dels bits en zero. El resultat serà que tots els bits originals quedaran com estaven llevat els bits en a on la caraça tinga 1, que resultaran encesos. Per eixemple, si en el patró de bits 0101 es vol encendre el segon bit es farà de la manera següent:
0101 OR 0010 (caraça) = 0111
Copiant bits
[editar | editar còdic]El OR, i el desplaçament llògic (explicat més alvance), pot ser usat per a copiar un grup de bits a una posició determinada.
Supongam que tenim el signe, l'exponent, i la part significativa d'un número, en diferents registres de 32 bits, i volem empaquetar-los per a formar un número en representació de punt flotant de simple precisió de 32 bits:
Signe: 00000000000000000000000000000001 Exponent: 00000000000000000000000010000011 Part significativa: 00000000011100000111000000001110
Tots ells tenen els valors correctes i tenim que moure cada u d'ells a la seua posició per a poder armar el punt flotant.
Es deu moure el signe 31 posicions cap a l'esquerra, l'exponent 23 posicions cap a l'esquerra, i la part significativa no és necessària moure-la perque ya està en la posició correcta. Estos desplaçaments es fan en l'operació de desplaçament cap a l'esquerra descrit més alvance:
Signe: 10000000000000000000000000000000 <-- Es desplaça el signe 31 posicions cap a l'esquerra
Exponent: 01000001100000000000000000000000 <-- Es desplaça l'exponent 23 posicions cap a l'esquerra Part significativa: 00000000011100000111000000001110 <-- La part significativa no es mou, ya està en el seu lloc
Ara que tenim cada part del número en el seu lloc, les combinem per a empaquetar-les i formar el número en la seua representació de punt flotant de 32 bits. Per a això usem el OR: (Resultat final) = (Signe) OR (Exponent) OR (Part significativa):
Signe: 10000000000000000000000000000000 Exponent: 01000001100000000000000000000000 Part significativa: 00000000011100000111000000001110 Resultat final: 11000001111100000111000000001110
Ya tenim el número en la seua representació de punt flotant definitiva.
Procediment genèric per a copiar un grup de bits
[editar | editar còdic]Per a copiar una série de bits en un lloc determinat usant OR, es necessita que eixe lloc a on es van a copiar tinga els seus bits en zero (per a fer un espai lliure per a poder copiar els bits). També es necessita que el registre a on es troben els bits que es volen copiar tinga els demés bits (els que no es volen copiar) apagats. Abdós operacions, aclarir els bits en el lloc del destí, i aclarir els bits que no es volen copiar es fan en AND:
Tenim dos registres de 16 bits:
Registre A: 1011 1100 0110 1100 Registre B: 1001 0001 1111 1010
Volem copiar els quatre bits menys significatius del registre A en el registre B.
Per a això, primer aclarim els 4 bits menys significatius de B en una operació AND, i aixina tindre un espai lliure:
1001 0001 1111 1010 <-- Valor original del registre B
AND 1111 1111 1111 0000 <-- Caraça per a aclarir els bits de B a on es van a copiar els que vénen de A
= 1001 0001 1111 0000 <-- Registre B preparat per a rebre els 4 bits menys significatius de A
Després, aclarim els bits d'A que no volem copiar, deixant solament els bits que volem copiar:
1011 1100 0110 1100 <-- Valor original del registre A AND
0000 0000 0000 1111 <-- Caraça per a deixar solament els bits d'A que es volen copiar
= 0000 0000 0000 1100 <-- Registre A en solament els bits que es desigen copiar
Ara estem llests per a fer el OR de sobre B i combinar els 4 bits menys significatius de sobre B:
0000 0000 0000 1100 <-- Registre A en els 4 bits que es desigen copiar OR 1001 0001 1111 0000 <-- Registre B en un espai per als 4 bits que desigen copiar = 1001 0001 1111 1100 <-- Registre B en els 4 bits menys significatius de copiats sobre ell
Ara, el registre B té copiat els 4 bits menys significatius de A. El restant dels bits de B varen quedar intactes.
XOR
[editar | editar còdic]| A | B | A XOR B |
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
El XOR bit a bit, o bitwise, pren dos número entero i realisa l'operació OR exclusiu en cada parell corresponent de bits. El resultat en cada posició és 1 si el parell de bits són diferents i zero si el parell de bits són iguals. Per eixemple:
0101 XOR 0011 = 0110
Invertint bits selectivament
[editar | editar còdic]A diferència de el NOT, que invertix tots els bits d'un registre, el XOR bit a bit, o bitwise, pot ser usat per a invertir selectivament un o més bits en un registre. Donat el patró de bits 0011, el segon i el quart bit poden ser invertits per XOR en una caraça en un patró de bits contenint 1 en les posicions que es volen invertir, la segona i quarta, i 0 en les demés. Els bits de les posicions en zero de la caraça resultaran inalterados:
0011 XOR 1010 (caraça) = 1001
Igualtat i desigualtat de bits
[editar | editar còdic]XOR és equivalent i té la mateixa taula de veres que la desigualtat, XOR i desigualtat són sinònims:
| A | B | A XOR B | A <> B |
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 1 |
| 1 | 0 | 1 | 1 |
| 1 | 1 | 0 | 0 |
El XOR pot usar-se per a saber si els bits corresponents de dos operants són iguals o diferents. Per eixemple, si tenim dos operants, 1000 i 0010 i volem saber si els bits més significatius d'abdós són iguals procedim com seguix:
1000 XOR 0010 = 1010
Ara, cada bit del resultat estarà en 0 si el bit corresponent dels dos operants són iguals, i en 1 si són diferents. El bit més significatiu del resultat està en 1 indicant que són diferents, pero tenim que aïllar-ho dels demés en un AND per a poder usar-ho o prendre una decisió:
1010 (resultat anterior) AND 1000 (caraça per a aïllar el bit més significatiu) = 1000
Ara ho tenim aïllat en el resultat final, que és diferent de zero indicant que els bits més significatiu dels operants són diferents.
Assignar zero a un registre
[editar | editar còdic]Els programadors alvançats de llenguage ensamblador usen XOR com una manera eficient i ràpida d'assignar zero a un registre. Realisar XOR d'un valor contra sí mateixa sempre resulta en zero (A XOR A sempre és zero), i en moltes arquitectura esta operació requerix menys cicles de rellonge i/o memòria que carregar un valor zero a un registre (A = 0).
En resum
[editar | editar còdic]Les operacions bit a bit, o bitwise, poden encendre, apagar, deixar passar, eliminar, o invertir, bits individualment o en conjunt, usant la caraça adequada en un OR, AND, o XOR:
0011 1011 10101 10101 1010 OR 1000 (caraça) AND 1110 (caraça) AND 00111 (caraça) AND 11000 (caraça) XOR 1001 (caraça) = 1011 = 1010 = 00101 = 10000 = 0011 Encén l'Apaga el Deixa passar els 3 Elimina els 3 Invertix els bits bit superior bit inferior bits inferiors bits inferiors inferior i superior
NOT invertix els bits i XOR junt en AND permeten determinar si dos operants tenen els bits d'una determinada posició iguals o diferents:
NOT 1011 11010
= 0100 XOR 10100
invertix tots = 01110 (0 = bit iguals, 1 = bits diferents)
els bits AND 00010 (es filtra el segon bits, que és el que interessa) = 00010 Determina si els bits de la segona posició dels dos operants són iguals o diferents 0 = iguals 1 = diferents
Vore també
[editar | editar còdic]- Negació llògica
- Conjunció llògica
- Disjunció llògica
- Disjunció exclusiva
- Llògica binaria
- Àlgebra de Boole
- Algoritme d'intercanvi usant XOR
- Llista encadenada de XOR
- Este artícul conté una traducció derivada de «Operador a nivel de bits» de Wikipedia en castellà publicada baix la Llicència de documentació lliure de GNU i la Llicència Creative Commons Reconeiximent-CompartirIgual 4.0 Internacional.