| Gates: XOR properties | ||||||||||||||
| More XOR tricks (amaze your friends!): | ||||||||||||||
| Classic swap problem (early CMSC 106) | ||||||||||||||
| temp = x; | ||||||||||||||
| x = y; | ||||||||||||||
| y = temp; | ||||||||||||||
| Using XOR: | ||||||||||||||
| x = x ^ y ; | ||||||||||||||
| y = x ^ y ; | ||||||||||||||
| x = x ^ y ; | ||||||||||||||
| Let x0 be the original value of x, y0 be the original value of y: | ||||||||||||||
| x = x ^ y = x0 ^ y0 | ||||||||||||||
| y = x ^ y = (x0 ^ y0) ^ y0 | Substitute for x | |||||||||||||
| = x0 ^ (y0 ^ y0) | Associative property | |||||||||||||
| = x0 ^ 0 | x ^ x = 0 | |||||||||||||
| = x0 | Identity | |||||||||||||
| x = x ^ y = (x0 ^ y0) ^ x0 | Substitute for x and y | |||||||||||||
| = (x0 ^ x0) ^ y0 | Associative, symmetric properties | |||||||||||||
| = 0 ^ y0 | x ^ x = 0 | |||||||||||||
| = y0 | Identity | |||||||||||||
| What other operator is a less-safe way of doing this? | ||||||||||||||