package main
import (
"fmt"
)
/*
Title: Gray‑Code Sequence (One‑Bit‑Change Order)
This program prints the 5‑bit Gray‑code sequence from 0 to 31.
Gray code guarantees that each successive value differs by exactly one bit.
Gray code formula:
gray(n) = n ^ (n >> 1)
The program prints the Gray‑code values themselves in the natural
one‑bit‑change order: 0, 1, 3, 2, 6, 7, 5, 4, ...
*/
/* Convert an integer to a 5‑bit binary string */
func toBits(value uint32) string {
bits := ""
for i := 4; i >= 0; i-- {
if value & (1 << i) != 0 {
bits += "1"
} else {
bits += "0"
}
}
return bits
}
/* Print the Gray‑code sequence in one‑bit‑change order */
func printGraySequence() {
for n := uint32(0); n < 32; n++ {
g := n ^ (n >> 1) // Gray‑code transformation
fmt.Printf("%2d -> %s\n", g, toBits(g))
}
}
func main() {
printGraySequence()
}
/*
run:
0 -> 00000
1 -> 00001
3 -> 00011
2 -> 00010
6 -> 00110
7 -> 00111
5 -> 00101
4 -> 00100
12 -> 01100
13 -> 01101
15 -> 01111
14 -> 01110
10 -> 01010
11 -> 01011
9 -> 01001
8 -> 01000
24 -> 11000
25 -> 11001
27 -> 11011
26 -> 11010
30 -> 11110
31 -> 11111
29 -> 11101
28 -> 11100
20 -> 10100
21 -> 10101
23 -> 10111
22 -> 10110
18 -> 10010
19 -> 10011
17 -> 10001
16 -> 10000
*/