Help language development. Donate to The Perl Foundation
A simple implementation of reflected binary Gray code
use Gray::Code::RBC; say gray-encode(73); # 93 say gray-encode(73).fmt: '%b'; # 1101101 say gray-decode(93); # 73 say gray-encode("١٢٣"); # 70
Gray code is an integer encoding such that adjacent values differ by at most one bit.
binary decimal de- round- number binary encoded encoded coded trip 0: 0000 => 0000 0 => 0000 0 1: 0001 => 0001 1 => 0001 1 2: 0010 => 0011 3 => 0010 2 3: 0011 => 0010 2 => 0011 3 4: 0100 => 0110 6 => 0100 4 5: 0101 => 0111 7 => 0101 5 6: 0110 => 0101 5 => 0110 6 7: 0111 => 0100 4 => 0111 7 8: 1000 => 1100 12 => 1000 8 9: 1001 => 1101 13 => 1001 9 10: 1010 => 1111 15 => 1010 10 11: 1011 => 1110 14 => 1011 11 12: 1100 => 1010 10 => 1100 12 13: 1101 => 1011 11 => 1101 13 14: 1110 => 1001 9 => 1110 14 15: 1111 => 1000 8 => 1111 15
Gray::Code::RBC is a simple implementation of the most common: reflected binary code Gray code. (Note that the spelling is always Gray as it is named after Bell Labs scientist: Frank Gray who originally popularized and patented it.)
(There are other types of Gray code but this module doesn't provide them.)
Exports two routines:
gray-encode()
- Convert a decimal Integer to Gray code (Takes an Integer, returns an Integer).
and
gray-decode()
- Convert a Gray code value to a decimal Integer (Takes an Integer, returns an Integer).
Both routines only accept and return Integers (or a String that can be coerced to an Integer). Any conversion to or from binary falls to other code.
Not limited by integer size. It is not unusual that Gray codes in practice are limited to some small (12, 16, 32) power of two. These routines are not thus limited and will handle arbitrarily large Integers.
Steve Schulze (thundergnat)
Copyright 2020 thundergnat
This library is free software; you can redistribute it and/or modify it under the Artistic License 2.0.