Operació bit a bit: diferència entre les revisions

Contingut suprimit Contingut afegit
Línia 164:
 
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) | paraula]] del processador, perquè si, per ara, un nombre gran és emmagatzemat en dos registres i es vol desplaçar cap a la dreta un bit, el bit que surt de l'extrem dret del registre de l'esquerra ha d'entrar per l'extrem esquerre del registre de la dreta. Amb rotació a través del implico, aquest bit és "emmagatzemat" al flag de l'implico durant el primer desplaçament cap a la dreta sobre el registre de l'esquerra, a punt per ser desplaçat al registre de la dreta usant una simple rotació amb implico cap a la dreta i sense utilitzar cap preparació extra.
 
==Aplicacions ==
Les operacions bit a bit són necessàries sobretot en el baix nivell de programació com els controladors de dispositius d'escriptura, gràfics de baix nivell, les comunicacions de muntatge paquet de protocol i descodificació.
 
Encara que les màquines sovint tenen eficient incorporat a les instruccions per realitzar operacions aritmètiques i lògiques, de fet, totes aquestes operacions es poden realitzar mitjançant la combinació dels operadors de bits i zero de proves-de diverses maneres {{cita requerida | data = 05 2012}}.
 
Per exemple, aquí hi ha una <code> [[pseudocodi]] exemple que mostra com multiplicar dos nombres enters arbitraris <code> a </code> i <code> b </code> (<code> a </code> més gran que b </code>) utilitzant només bitshifts i l'addició:
 
<code>
c := 0
'''while''' b ≠ 0
'''if''' (b '''and''' 1) ≠ 0
c := c + a
left shift a by 1
right shift b by 1
'''return''' c
</code>
 
 
Aquesta implementació de [[multiplicació de l'antic Egipte]], com la majoria [[algorisme de multiplicació]], implica bitshifts. Al seu torn, fins i tot més es poden escriure amb només bitshifts i zero proves-{{cita requerida | data = 05 2012}}:
 
<code>
c := b '''and''' a
'''while''' a ≠ 0
c := b '''and''' a
b := b '''xor''' a
left shift c by 1
a := c
'''return''' b
</code>
 
== Vegeu també ==