 Classical computational gates are Boolean logic gates that manipulate information stored in bits. In quantum computing such gates are represented by matrices, and can be visualised as rotations over the Bloch sphere. This visualisation represents the fact that quantum gates are unitary operators, i.e., they preserve the norm of the quantum state (if \(U\) is a matrix describing a single qubit gate, then \(U^{\dagger}U=I\), where \(U^{\dagger}\) is the adjoint of \(U\), obtained by transposing and then complex-conjugating \(U)\). In classical computing some gates are “universal”. For example the NAND gate is a gate that evaluates the function “not both A and B” over its two inputs. By stringing together a number of NAND gates it is possible to compute any computable function. Another universal gate is the NOR gate, which evaluates the function “not (A or B)”. In the context of quantum computing it was shown (DiVincenzo 1995) that two-qubit gates (i.e. which transform two qubits) are sufficient to realise a general quantum circuit, in the sense that a circuit composed exclusively from a small set of one- and two-qubit gates can approximate to arbitrary accuracy any unitary transformation of \(n\) qubits. Barenco et. al. (1995) showed in particular that any multiple qubit logic gate may be composed in this sense from a combination of single-qubit gates and the two-qubit controlled-not (CNOT) gate, which either flips or preserves its “target” input bit depending on the state of its “control” input bit (specifically: in a CNOT gate the output state of the target qubit is the result of an operation analogous to the classical exclusive-OR (XOR) gate on the inputs). One general feature of quantum gates that distinguishes them from classical gates is that they are always reversible: the inverse of a unitary matrix is also a unitary matrix, and thus a quantum gate can always be inverted by another quantum gate.