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:40] – [Chess - Programming - de Bruijn Sequence - 8-bit Example] peterchess:programming:de_bruijn_sequence:8-bit_example [2021/11/30 00:53] (current) – [Explaining the usage of this de Bruijn sequence] peter
Line 85: Line 85:
     * 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.1638232807.txt.gz · Last modified: 2021/11/30 00:40 by peter

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki