More specifically, how was this derived? Was it a mere coincidence
that XOR such and such values does this? This question applies to
all bitwise operators.
Queste operazioni bit a bit corrispondono a noti elementi elementari
operazioni da algebra superiore che descriverò brevemente.
Aritmetica modulare
Il primo elemento importante è modulare
aritmetica -che è un
tipo speciale di calcoli a quoziente
anello . Anche se non lo fai
sospetto che tu abbia già familiarità con casi speciali di modulare
aritmetica.
Se scegliamo un intero positivo N che chiamiamo modulo possiamo
calcolare su residui modulo N che è proprio come il calcolo con
numeri normali e fingendo di N = 0 . Tutto il solito calcolo
le regole sui numeri interi sono ancora valide, con due disposizioni:
-
Per i residui a = b modulo N significa che gli interi a e b differiscono un multiplo di N .
-
Per i residui modulo N la relazione m × a = m × b non implica
che a = b anche se m è diverso da zero modulo N . [RSA]
Ma i restanti rapporti usuali rimangono validi. Esaminiamo alcuni esempi.
-
Se il 2 gennaio è un giovedì, febbraio 2 è domenica
perché identifichiamo i giorni con i residui modulo 7 e, avendo gennaio
31 giorni, scriviamo
2 + 31 = 2 + 4 × 7 + 3 = 2 + 3 = 5
in modo che il 2 febbraio sia lo stesso giorno della settimana del 5 gennaio, una domenica.
-
A scuola impariamo a riassumere le cifre dei numeri per verificare se siamo noi
ha funzionato bene una moltiplicazione. In realtà stiamo calcolando
residui modulo 9, in modo che 10 = 1, e verificare che il nostro
la moltiplicazione è corretta modulo 9. (Naturalmente, questo non lo è
infallibile, ad es. non vedremmo se eravamo fuori da 9).
-
Quando calcoliamo su bit, calcoliamo sui residui modulo 2 e il
l'aggiunta è XOR
, la moltiplicazione è AND
. Quindi
a XOR b = a + b
a AND b = a × b
NOT a = 1 XOR a = 1 + a = 1 - a (che è la definizione "buona" di NOT)
a OR B = a + b + a × b
Come esercizio, puoi verificare che a OR b
sia NOT(NOT a AND NOT b)
di
espandendo l'espressione algebrica corrispondente. È altresì
interessante notare che "l'operazione facile" è XOR
e non OR
.
[RSA]: come nota a margine, il sistema RSA si basa sulla teoria nultiplicativa di residui modulo N dove N è il prodotto di due numeri primi.
Algebra lineare
Algebra lineare
sistematizza calcoli su coordinate. A un livello elementare, esso
viene insegnato con le coordinate nell'anello R di numeri reali e
applicato alla geometria e alla meccanica. Ring è il termine matematico per a
insieme di coefficienti, su cui possiamo calcolare proprio come su interi. Così,
sì, i set di residui modulo un dato N sono anche anelli, e possono anche
essere come coefficienti per fare algebra lineare.
Ora lascia B essere l'anello di residui modulo 2, cioè 0, 1 dotato di
addizione e moltiplicazione come sopra. Un registro macchina, diciamo in un 8
macchina bit, ma 8 potrebbe essere qualsiasi altro numero, può essere visto come un
Vettore a 8 dimensioni con voci in B , in modo che a XOR b = a + b
,
dove l'aggiunta considerata è l'aggiunta di di vettori con le voci
in B . (Se consideri a
e b
come rappresentazione di 2-complementi di
alcuni numeri interi, a XOR b
non ha nulla a che fare con la somma di questi
numeri interi).
XOR-Swap
Ora diamo un'occhiata troppo stridente all'algoritmo XOR-Swap. Noi
inizia con a
e b
e scrivo a[k]
e b[k]
i valori di a
e b
a
i vari passaggi degli algoritmi.
a[1] ← a[0] + b[0]
b[1] ← a[1] + b[0]
a[2] ← b[1] + a[1]
Si noti che per questi vettori con voci in B abbiamo,
b[1] = a[0] + 2× b[0] = a[0]
a[2] = b[1] + a[1] = 2 × a[0] + b[0] = b[0]
Quindi, alla fine del nostro calcolo, b
contiene il valore iniziale di a
e
a
contiene il valore iniziale di b
.