proc gray_encode(word n) word: n >< (n >> 1) corp proc gray_decode(word n) word: word r; r := n; while n := n >> 1; n > 0 do r := r >< n od; r corp proc main() void: word i, enc, dec; for i from 0 upto 31 do enc := gray_encode(i); dec := gray_decode(enc); writeln(i:2, ": ", i:b:5, " => ", enc:b:5, " => ", dec:b:5, " => ", dec:2) od corp