Code Gray

 

En automatique, lorsqu'on procède à un comptage 0 , 1 , 2 , 3 ,4 , ... cela se traduit en binaire naturel
Par exemple sur 4bits par 0000, 0001, 0010, 0011, 0100, ...
Problême : lors du passage de 0001 à 0010 , 2 bits doivent changer d'état.
On pourrait alors avoir 0000, 0001, 0011, 0010 ou 0000, 0001, 0000, 0010. C'est-à-dire 0 , 1, 3, 2 ou 0 , 1, 0, 2
De même pour le passage de 0011 à 0100, etc.
Le codage Gray, appelé encore binaire réfléchi donne une succession de nombres binaires qui ne différent que par 1 bit.

L'algorithme est Ng = ( N ⊕ 2N ) / 2

Voici la traduction simple en PHP :

<?
function gray( $x )
{
         if ( ($x == 0) || ($x == 1) ) return $x;
         return ( ( $x ^ ( $x << 1) ) >> 1);
}
?>
<TABLE><tr><td>N</td><td>gray</td></tr>
<?
// les 16 premiers nombres
for ( $i = 0; $i < 16; $i++ )
{
         $x = sprintf("%04b", gray($i) ); // sur 4 bits, complété par des 0 à gauche
         echo "<tr><td>".$i."</td><td>".$x."</td></tr>";
}
?>
</TABLE>

Les résultats

DécimalCode Gray
00000
10001
20011
30010
40110
50111
60101
70100
81100
91101
101111
111110
121010
131011
141001
151000

 


Si vous aimez le site
Member of the Anti Hacker Alliance

Select a language if you need :


Page chargée en 0.001 sec.

Dernière Modification : Dim 28 Avril 2019 12:45
Copyright © 1999-2019 Jean-Paul Molina Tous droits réservés.

vers Google