Nous sommes actuellement le 07 Juil 2026, 17:40

Le fuseau horaire est UTC-5 heures [Heure d’été]




Publier un nouveau sujet Répondre au sujet  [ 4 message(s) ] 
Auteur Message
MessagePublié: 03 Mars 2005, 20:32 
Hors-ligne
Répond à tout!
Répond à tout!
Avatar de l’utilisateur

Inscription : 07 Jan 2002, 18:14
Message(s) : 2312
Localisation : Québec
Bon..Voici la question comment inverser un nombre

Voici un exemple...

J'ai eu droit a ce probleme aujourd'hui je l'ai réussi mais je me demandais si il n'y aurait pas une formule au lieu de faire 2 décalages de bits...

Pensez-y...Ca doit marcher pour n'importe quel nombre de 8 bits.
Code :
1010 1110  devient  0111 0101

ou

0xAE   devient     0x75

Le bit 7 devient le bit 0
Le bit 6 devient le bit 1
Le bit 5 devient le bit 2
Le bit 4 devient le bit 3
Le bit 3 devient le bit 4

etc...

_________________
Le Penguin, Membre des Forums de Micro.Info

1.Il y a de ces souffrances qui nous feront mal à tous jamais.
2.Le partage est notre force aucune loi ne pourra jamais nous empecher le partage en communauté! Len tu ne nous arretera pas!


Haut
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 04 Mars 2005, 12:13 
Hors-ligne
Fidèle
Fidèle
Avatar de l’utilisateur

Inscription : 22 Fév 2002, 20:54
Message(s) : 738
Localisation : Montréal
Tu pourrais t'en sortir avec des "if", des "&" et des "|" mais d'après moi la méthode la plus simple reste les 2 décalages, un peu comme ça:

Code :
#include <stdio.h>

void main()
{
   int nNum = 0xae;
   int nRes = 0;
   int i,j;
   for(i=1,j = 0x80; j>0;i<<=1,j>>=1)
      if(nNum&i) nRes|=j;
   printf("0x%x -> 0x%x\n", nNum, nRes);
   return;
}



Haut
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 04 Mars 2005, 18:08 
Hors-ligne
Répond à tout!
Répond à tout!
Avatar de l’utilisateur

Inscription : 07 Jan 2002, 18:14
Message(s) : 2312
Localisation : Québec
Wais effectivement aprèes mur réflexion je ne pense qu'il y ait une équation possible :?

_________________
Le Penguin, Membre des Forums de Micro.Info

1.Il y a de ces souffrances qui nous feront mal à tous jamais.
2.Le partage est notre force aucune loi ne pourra jamais nous empecher le partage en communauté! Len tu ne nous arretera pas!


Haut
 Profil  
Répondre en citant  
 Sujet du message:
MessagePublié: 04 Mars 2005, 19:54 
Hors-ligne
Modérateur
Modérateur
Avatar de l’utilisateur

Inscription : 07 Jan 2002, 15:10
Message(s) : 3551
Localisation : Beauport, Québec
Y'a toujours moyen d'utiliser la vieille méthode de diviser par 2 et de garder le reste pour construire une série de 1 et de 0.

J'ai pas de compilateur C ou C++ d'installé, alors voici un bout de code VB qui le fait très bien:

Code :
Function iInverseBits(iNumber As Integer, iNbBits As Integer) As Integer

Dim i As Integer

For i = iNbBits To 1 Step -1
    iInverseBits = iInverseBits + (iNumber Mod 2) * 2 ^ (i - 1)
    iNumber = Int(iNumber / 2)
Next i
   
End Function

_________________
Procyon,
Modérateur de la section Trouvailles


Haut
 Profil  
Répondre en citant  
Afficher les messages publiés depuis :  Trier par  
Publier un nouveau sujet Répondre au sujet  [ 4 message(s) ] 

Le fuseau horaire est UTC-5 heures [Heure d’été]


Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 1 invité


Vous ne pouvez pas publier de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum

Recherche de:
Aller vers :  
Propulsé par phpBB® Forum Software © phpBB Group
Traduction et support en françaisHébergement de site