Binaire Réflechi

Résolu
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 - 15 déc. 2004 à 19:18
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 - 16 déc. 2004 à 13:58
Bonsoir,

Je cherche une petite fonction ou un début d'algorithme pour faire du binaire reflechi. Je m'explique :

decimal | binaire | binaire reflechi | decimal

0 000 000 0
1 001 100 4
2 010 010 2
3 011 110 6
4 100 001 1
5 101 101 5
6 110 011 3
7 111 111 7

et ceci pour n'importe quels nombres du style (2^n) - 1

0 0000 0000 0
1 0001 1000 8
2 0010 0100 4
.
.
14 1110 0111 7
15 1111 1111 15

J'ai bien une methode, en passant par des chaines de caractères mais je l'a trouve un peu "lourde". Si quelqu'un avec un truc avec des masques ou des décalages de bit, etc je suis preneur. (j'ai cherché cet apres midi mais je me suis pris la tête et je n'ai pas trouvé)
J'espere avoir été clair et merci pour vos réponses,

Matt...

7 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 déc. 2004 à 21:45
Semble aller, pas trop le temps de tester, tu verras:

char szappname[] = "InvBits";

BYTE InvertBits(BYTE a)
{
int i;
BYTE b = 0;
for(i = 0; i < 7; i++) {
b |= (a & 1);
b <<= 1;
a >>= 1;
}
b |= (a & 1);
return b;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE x, PSTR y, int z)
{
char buff[36];
BYTE a = 201;
ultoa(a, buff, 2);
MessageBox(0, buff, szappname, 0);
ultoa(InvertBits(a), buff, 2);
MessageBox(0, buff, szappname, 0);
return 0;
}

ciao...
BruNews, MVP VC++
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 déc. 2004 à 20:30
0 000 000 0
1 001 100 4
y a un lien logique entre les 2 octets ???
Je veux bien jouer mais me faudrait la regle du jeu precise.
ex: inverser les bits ou autre.

ciao...
BruNews, MVP VC++
0
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 3
15 déc. 2004 à 20:59
En fait voila

j'ai un tableau de 16 élément (ou plus mais toujours égal a 2^n) et le contenu de chaque élément doit être le binaire reflechi de l'indice
16 = 2^4 codé sur 4 bits :
Ex :
tab[0] = 0
tab[1] = 8
tab[2] = 2
ex ...

Sur 4 bits
0 en binaire naturel 0000 en binaire reflechi 0000 en dec 0
1 en binaire naturel 0001 en binaire reflechi 1000 en dec 8
2 en binaire naturel 0010 en binaire reflechi 0100 en dec 4

en fait si tu regardes le binaire naturel dans un miroir tu as du binaire reflechi...

Ai je été plus clair ?

Matt...
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
15 déc. 2004 à 21:03
//Exemple au pif
char buf[12] = "001", *p = buf;
char bufref[12], *r = bufref;

//Va a la fin de la chaine (zero final)
while (*p) p++;
p--; //revient sur le dernier element de la chaine
while (p >= buf) {
*r++ = *p--;
}

*r = 0;

Voila chef ;)

++

+2(p - n)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 3
15 déc. 2004 à 21:12
désolé ca ne s'appelle pas du binaire reflechi car le binaire reflechi, on ne change qu'un bit a la fois...

AlexMan merci mais la solution avec les chaines de caractères je l'avais et comme je l'ai deja dit dans mon premier poste je l'a trouve un peu lourd. Convertir mon indice de tableau en chaine binaire puis inverser les bits pour reconvertir en décimal. Je demandais juste s'il y avait plus simple ?

Merci quand même a vous deux,

Matt...
0
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 3
15 déc. 2004 à 22:31
Ok, j'imprime et je teste demain merci...

Matt...
0
cs_Matt67 Messages postés 549 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 6 mars 2010 3
16 déc. 2004 à 13:58
Bonjour,

Merci BruNews ca marche impeccable et en plus j'ai compris le principe. Bien vu,

Matt...
0
Rejoignez-nous