This is the gray code. The changing rule can be:
rule1: update the rightmost bit
rule2: for xxx100…00, it can change the digit x which is next to 100..00
See lc1611
For example, 1001000 has 2 ways of change:
1. rule1 -> 1001001
2. rule2 -> 1011000
Another example, 1111 has 2 ways of change:
1. rule1 -> 1101
2. rule2 -> 1110
The property of gray code, is that each two adjacent number only have 1 bit difference.
For example, in decimal, if we want to update from 011 to 100, the electronic element may change like 100->101->111->100. There is potential ephemeral number 101, 111. In gray code, this won’t happen. Because each two adjacent number only has 1 bit difference.
Decimal | Binary | Gray |
---|---|---|
0 | 0000 | 0000 |
1 | 0001 | 0001 |
2 | 0010 | 0011 |
3 | 0011 | 0010 |
4 | 0100 | 0110 |
5 | 0101 | 0111 |
6 | 0110 | 0101 |
7 | 0111 | 0100 |
8 | 1000 | 1100 |
9 | 1001 | 1101 |
10 | 1010 | 1111 |
11 | 1011 | 1110 |
12 | 1100 | 1010 |
13 | 1101 | 1011 |
14 | 1110 | 1001 |
15 | 1111 | 1000 |
Transformation from decimal to gray code. See here.
- keep the leftmost bit same.
- For each following bit, xor the 2 adjacent decimal bits
(10011001)d -> (11010101)gc
Transformation from gray code to decimal. See here
- keep the leftmost bit same.
- For each following bit, xor current gray code bit and decimal bit
(11010101)gc -> (10011001)d