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

  FORUM HardWare.fr
  Programmation
  C

  décalage en boucle d'une valeur

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

décalage en boucle d'une valeur

n°1896115
Zarine
Posté le 17-06-2009 à 10:42:49  profilanswer
 

Je cherche à faire un décalage en boucle d'une valeur.
 
Par exemple :
10101010 décalé vers la droite 1 fois donnerait : 01010101 (classique avec X>>1)
10101010 décalé vers la gauche 1 fois donnerait : 01010101 (pas classique avec X<<1)
 
10101010 décalé vers la droite 8 fois donnerait : 10101010
 
En sachant que :
Je suis sur matériel embarqué avec peu de bibliothèque disponible (même pas de stdio par exemple, même si j'ai un équivalent)
Que je peux faire une fonction sans problème tant que ça prend pas trop de place (je suis limité à 32 ko et mon programme est déjà assez long (1000 lignes) et prend 23 ko et risque de grossir encore)
Et si c'est lourd comme solution (plus de 5 cycles CPU) je passe.
Que je connais pas les fonction assembleurs disponibles ou non de mon processeur et que je sais pas si le compilateur dédié supporte de manger de l'assembleur.

Message cité 1 fois
Message édité par Zarine le 17-06-2009 à 10:45:22
mood
Publicité
Posté le 17-06-2009 à 10:42:49  profilanswer
 

n°1896145
Joel F
Real men use unique_ptr
Posté le 17-06-2009 à 11:09:00  profilanswer
 

faut decaler a droite de X, à gauche de Nbits-X et faire un OU logique

n°1896164
Emmanuel D​elahaye
C is a sharp tool
Posté le 17-06-2009 à 11:26:44  profilanswer
 

Zarine a écrit :

Je cherche à faire un décalage en boucle d'une valeur.


Ca s'appelle une rotation ... On ne sait pas le faire directement en C standard, mais on peut le coder... un peu lourdingue ...

Citation :

Que je connais pas les fonction assembleurs disponibles ou non de mon processeur et que je sais pas si le compilateur dédié supporte de manger de l'assembleur.


Alors renseigne toi, car c'est certainement la meilleure solution. Je doute que la solution C soit traduite directement par une instruction assembleur (Rotation à droite ou a gauche, avec ou sans retenue etc.), à moins que ton compilateur soit TRES performant.

 

Message cité 1 fois
Message édité par Emmanuel Delahaye le 17-06-2009 à 11:27:08

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1896216
gilou
Modérateur
Modosaurus Rex
Posté le 17-06-2009 à 12:43:44  profilanswer
 

Emmanuel Delahaye a écrit :

Alors renseigne toi, car c'est certainement la meilleure solution. Je doute que la solution C soit traduite directement par une instruction assembleur (Rotation à droite ou a gauche, avec ou sans retenue etc.), à moins que ton compilateur soit TRES performant.

Pareil. En général ce type d'instruction c'est réalisé comme un appel à du code assembleur très simple. Si en plus des contraintes que tu as énuméré (nb de cycles, etc), ton compilo n'est pas capable d'appeler du code assembleur, reste plus que la pendaison ou la noyade comme solution. :D
A+,


---------------
There's more than what can be linked! --  Le capitaine qui ne veut pas obéir à la carte finira par obéir aux récifs. -- Il ne faut plus dire Sarkozy, mais Sarkozon -- (╯°□°)╯︵ ┻━┻
n°1896300
Un Program​meur
Posté le 17-06-2009 à 15:32:32  profilanswer
 

gcc traduit

Code :
  1. unsigned rot(unsigned x)
  2. {
  3.     #define MASK (~0U << 10)
  4.     #define UMASK (~MASK)
  5.    
  6.     return ((x & MASK) >> 10) | ((x & UMASK) << 22);
  7. }


avec l'instruction de rotation du processeur depuis au moins la 2.95 (j'ai pas plus vieux pour tester), mais ne traduit pas l'équivalent avec un nombre de rotation variable avec l'instruction assembleur pourtant existante.
 


---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°1896303
Emmanuel D​elahaye
C is a sharp tool
Posté le 17-06-2009 à 15:39:10  profilanswer
 

Un Programmeur a écrit :

gcc traduit

Code :
  1. unsigned rot(unsigned x)
  2. {
  3.     #define MASK (~0U << 10)
  4.     #define UMASK (~MASK)
  5.    
  6.     return ((x & MASK) >> 10) | ((x & UMASK) << 22);
  7. }


avec l'instruction de rotation du processeur depuis au moins la 2.95 (j'ai pas plus vieux pour tester), mais ne traduit pas l'équivalent avec un nombre de rotation variable avec l'instruction assembleur pourtant existante.

 



Alors il n'y a plus qu'à essayer sur la cible du P.O.

 


Message édité par Emmanuel Delahaye le 17-06-2009 à 15:42:09

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/

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

  décalage en boucle d'une valeur

 

Sujets relatifs
[Résolu] MySQL : LEFT JOIN et GROUP BY - récupérer la dernière valeur[Oracle & PHP] boucle if dans while : problème
Récupérer valeur entre balise XMLExcel 2003, problème avec une boucle
Site qui diffuse une vidéo en boucle.Transmission de valeur depuis formulaire vers BDD
garder la Valeur d'une liste de choixdécalage du curseur (voir image)
struts validator : valeur d'un champ dans le message d'erreurBoucle de DELETE en fonction d'un SELECT
Plus de sujets relatifs à : décalage en boucle d'une valeur


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