Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3172 connectés 

  FORUM HardWare.fr
  Programmation
  C

  inversion MSB/LSB

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

inversion MSB/LSB

n°1133169
Naamah
emerge love
Posté le 28-06-2005 à 09:35:19  profilanswer
 

bonjour,
 
vous n'auriez pas une astuce pour inverser (le MSB devient le LSB et ainsi dessuite) un 16bits ?
 
attention, je ne parle pas de champs de bit ou te table de correspondance, car c'est pour de l'embarqué et ces solutions sont "trop" lourdes.
 
Je pensais plutot à une combinaison d'operateurs logiques...
 
Merci

mood
Publicité
Posté le 28-06-2005 à 09:35:19  profilanswer
 

n°1133188
Taz
bisounours-codeur
Posté le 28-06-2005 à 09:46:49  profilanswer
 

(x >> 8) | (x << 8)

n°1133204
Naamah
emerge love
Posté le 28-06-2005 à 10:05:20  profilanswer
 

pardon je me suis mal exprimé, c'est un mirroir bit a bit dont j'ai besoin, par un swap d'octet ;)
merci quand meme

n°1133207
Naamah
emerge love
Posté le 28-06-2005 à 10:06:36  profilanswer
 

ca marcherait ca ?
 

Code :
  1. for (i=0;i<12;i++){
  2. result = result + (((nbre >> i) && 1) * (0x800 >> i));
  3. }


 
PS: j'ai besoin de le faire que sur 12 bits en fait...


Message édité par Naamah le 28-06-2005 à 10:07:26
n°1133212
chrisbk
-
Posté le 28-06-2005 à 10:10:49  profilanswer
 

(le lsb msb c'est pas du "miroir a bits" hein ?)

n°1133217
Naamah
emerge love
Posté le 28-06-2005 à 10:14:44  profilanswer
 

"less significant bit" et "most SB"

n°1133220
chrisbk
-
Posté le 28-06-2005 à 10:20:04  profilanswer
 

ouais je sais, mais alors tu veux vraiment faire une conversion MSB->LSB ou pas ?

n°1133234
Naamah
emerge love
Posté le 28-06-2005 à 10:25:36  profilanswer
 

non je veux transformer 100111100 en 001111001 par exemple, mais sur 12 bits

n°1133240
chrisbk
-
Posté le 28-06-2005 à 10:28:33  profilanswer
 

Code :
  1. int res = 0;
  2. for (i=0;i<12;i++) {
  3.   int pouet = ((src & (1<<i))) >> i;
  4.   res |= pouet << (11-i);
  5. }


 
jsuppose ca doit marcher

n°1133251
Taz
bisounours-codeur
Posté le 28-06-2005 à 10:31:49  profilanswer
 

c'est quoi le problème avec les champs de bits en fait ?

mood
Publicité
Posté le 28-06-2005 à 10:31:49  profilanswer
 

n°1133300
Naamah
emerge love
Posté le 28-06-2005 à 10:52:05  profilanswer
 

je fait de l'embarqué donc g pas beaucoup de ressource memoire et temps...
il faut faire attention a tout :)

n°1133304
Naamah
emerge love
Posté le 28-06-2005 à 10:53:00  profilanswer
 

merci chrisbk, je vais comparer ton algo et le mien ;)

n°1133307
Taz
bisounours-codeur
Posté le 28-06-2005 à 10:53:52  profilanswer
 

et ? fais le avec des champs de bits, et ensuite compare l'assembleur. Mesure sa taille et sa vitesse d'exécution.

n°1133312
chrisbk
-
Posté le 28-06-2005 à 10:55:03  profilanswer
 

le tiens marche pas :o (&& a la place de & ) pis y'a des muls tout laide :o

n°1133319
theShockWa​ve
I work at a firm named Koslow
Posté le 28-06-2005 à 10:59:27  profilanswer
 

il doit bien y avoir moyen d'adapter un truc comme ca, si tu veux que ca aille vite, non ?
 
http://paul.rutgers.edu/~rhoads/Code/rev.long.c

n°1133325
Naamah
emerge love
Posté le 28-06-2005 à 11:03:20  profilanswer
 

theShockWave a écrit :

il doit bien y avoir moyen d'adapter un truc comme ca, si tu veux que ca aille vite, non ?
 
http://paul.rutgers.edu/~rhoads/Code/rev.long.c


 
 
ca a l'air cool ca ;)

n°1133332
Taz
bisounours-codeur
Posté le 28-06-2005 à 11:06:30  profilanswer
 

Code :
  1. union UInt12
  2. {
  3. unsigned uint12;
  4. struct
  5. {
  6.  unsigned filler : 20;
  7.  unsigned b0 : 1;
  8.  unsigned b1 : 1;
  9.  unsigned b2 : 1;
  10.  unsigned b3 : 1;
  11.  unsigned b4 : 1;
  12.  unsigned b5 : 1;
  13.  unsigned b6 : 1;
  14.  unsigned b7 : 1;
  15.  unsigned b8 : 1;
  16.  unsigned b9 : 1;
  17.  unsigned bA : 1;
  18.  unsigned bB : 1;
  19. } bits;
  20. };
  21. unsigned short mirror_bits(unsigned short x)
  22. {
  23. #define SWAP_BIT(A, B) do { \
  24. unsigned c = (A); \
  25. (A) = (B); \
  26. (B) = c; \
  27. } while(0)
  28. union UInt12 u;
  29. u.uint12 = x;
  30. SWAP_BIT(u.bits.b0, u.bits.bB);
  31. SWAP_BIT(u.bits.b1, u.bits.bA);
  32. SWAP_BIT(u.bits.b2, u.bits.b9);
  33. SWAP_BIT(u.bits.b3, u.bits.b8);
  34. SWAP_BIT(u.bits.b4, u.bits.b7);
  35. SWAP_BIT(u.bits.b5, u.bits.b6);
  36. return u.uint12;
  37. #undef SWAP_BIT
  38. }

donne un résultat pas mal comparé à la version déroulée de la boucle de chrisbk


Message édité par Taz le 28-06-2005 à 11:08:11
n°1133804
Naamah
emerge love
Posté le 28-06-2005 à 15:32:13  profilanswer
 

merci


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  inversion MSB/LSB

 

Sujets relatifs
Inversion de matrice nxn n tres grand. Méthode numérique?inversion matricielle
inversion de liste chaineInversion de couleurs [Résolu]
[algo] inversion d'une matrice, cas "particulier"Produit de 2 matrices de format différent et inversion de matrice
Plus de sujets relatifs à : inversion MSB/LSB


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)