Gray code
<hardware> A
binary sequence with the property that only one
bit changes between any two consecutive elements (the two codes have a
Hamming distance of one).
The gray code originated when digital logic circuits were built from vacuum tubes and electromechanical relays. Counters generated tremendous power demands and noise spikes when many bits changed at once.
E.g. when incrementing a register containing 11111111, the back-EMF from the relays' collapsing magnetic fields required copious noise suppression. Using gray code counters, any increment or decrement changed only one bit, regardless of the size of the number.
Gray code can also be used to convert the angular position of a disk to digital form.
A radial line of sensors reads the code off the surface of the disk and if the disk is half-way between two positions each sensor might read its bit from both positions at once but since only one bit differs between the two, the value read is guaranteed to be one of the two valid values rather than some third (invalid) combination (a
glitch).
One possible
algorithm for generating a gray code sequence is to toggle the lowest numbered bit that results in a new code each time.
Here is a four bit gray code sequence generated in this way:
0 0 0 0 0 0 0 1 0 0 1 1 0 0 1 0 0 1 1 0 0 1 1 1 0 1 0 1 0 1 0 0 1 1 0 0 1 1 0 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 0 0 1 1 0 0 0
The codes were patented in 1953 by Frank Gray, a
Bell Labs researcher.
(http://www.nist.gov/dads/HTML/graycode.html).