16 lines
350 B
Plaintext
16 lines
350 B
Plaintext
defmodule Gray_code do
|
|
use Bitwise
|
|
def encode(n), do: bxor(n, bsr(n,1))
|
|
|
|
def decode(g), do: decode(g,0)
|
|
|
|
def decode(0,n), do: n
|
|
def decode(g,n), do: decode(bsr(g,1), bxor(g,n))
|
|
end
|
|
|
|
Enum.each(0..31, fn(n) ->
|
|
g = Gray_code.encode(n)
|
|
d = Gray_code.decode(g)
|
|
:io.fwrite("~2B : ~5.2.0B : ~5.2.0B : ~5.2.0B : ~2B~n", [n, n, g, d, d])
|
|
end)
|