User Tools

Site Tools


chess:programming:de_bruijn_sequence:8-bit_example

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
chess:programming:de_bruijn_sequence:8-bit_example [2021/11/30 00:36] peterchess:programming:de_bruijn_sequence:8-bit_example [2021/11/30 00:53] (current) – [Explaining the usage of this de Bruijn sequence] peter
Line 3: Line 3:
 An 8-bit value has 8 digits. An 8-bit value has 8 digits.
  
-  * The position can be represented by 3 bits+  * The position can be represented by 3 bits
 +    * Log2(8) = 3.
  
 ---- ----
Line 80: Line 81:
 </code> </code>
  
 +  * This table is made by using the **index order** to determine the next number from the **final order** columns.
   * The de Bruijn sequence must start with the first digit, the 0 element.   * The de Bruijn sequence must start with the first digit, the 0 element.
     * This is to prevent overflow and to allow the whole to circulate naturally during multiplication (left shift operation).     * This is to prevent overflow and to allow the whole to circulate naturally during multiplication (left shift operation).
 +
 +</WRAP>
 +
 +----
 +
 +===== Explaining the usage of this de Bruijn sequence =====
 +
 +<code cpp>
 +constexpr int table [8] = { 1 , 2 , 7 , 3 , 8 , 6 , 5 , 4 };
 +</code>
 +
 +The c++ code above performs the following function.
 +
 +  * It takes a number from 1 to 8 to lookup.
 +  * It multiplies this number by 0x1D, which is 29 Decimal.  This is the Magic Number.
 +  * It right-shifts this by 5 to determine the specific bit position of that lookup value.
 +
 +^Lookup^Lookup multiple by the magic number^Right-shifted by the offset^
 +^:::^(29 in this example)^(5 in this example)^
 +|1|29|0|
 +|2|58|1|
 +|7|203|6|
 +|3|87|2|
 +|8|232|7|
 +|6|174|5|
 +|5|145|4|
 +|4|116|3|
 +
 +<WRAP info>
 +**NOTE:** This shows that:
 +
 +  * A lookup of **1** returns 0, which is the first bit.
 +  * A lookup of **2** returns 1, which is the second bit.
 +  * A lookup of **3** returns 2, which is the third bit.
 +  * ...and so on.
 +
 +Every lookup returns a unique and distinct value.
  
 </WRAP> </WRAP>
chess/programming/de_bruijn_sequence/8-bit_example.1638232560.txt.gz · Last modified: 2021/11/30 00:36 by peter

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki