accès aux bits d'un entier en C

jeromed1

Nouveau membre
Bonjour,

savez vous comment gérer un int comme un tableau de 32 bits, c'est à dire modifier, accéder aux bits qui le composent?

Merci

Jérôme
 

Stitch+

Grand Maître
tp4 : http://icps.u-strasbg.fr/~giersch/enseignement/2003-2004/Archi/
manipulation de bits
en espérant que ça aide
 

Dumoria

Habitué
Salut,
Peuvent être utiles aussi, pour ce genre d'opération, les opérateurs << et >>

exemple : toto>>4 -> décalage logique de toto de 4 bits vers la droite. Mais bon c'est gadget et pas indispensable.
 

TotalRecal

Nouveau membre
non c'est pas gadget, ça peut même se révéler indispensable quand on rempli son nombre rang par rang.
Ex : stocker une valeur RGB dans un entier, on commence par les 8 a droite ensuite on vient se décaler de 8 vers la gauche (<< 8) on rempli, etc...
 

Nosfera7ux

Nouveau membre
je ne pense pas qu'il existe de "gadget" en C++ !!
Et les operateurs de décalage ">>" "<<" sont aussi importants et utilisés que les opérateurs logiques "|" "&" "~".
Totalement d'accord avec TotalRecal :bounce:
 

Dumoria

Habitué
On peut toujours remplacer par des & avec les filtres adéquats, mais c'est vrai que dans le cas que tu donnes, ce sera vachement plus simple.

J'avais jamais vu d'exemple où l'utilisation de << était vraiment inévitable, maintenant je sais qu'il y en a :)

Et j'affirme qu'il y a quelques trucs gadget en C. Au moins un : i++ tout simplement. Ca n'a rien de pejoratif, inutile de s'énerver. Je suis pas un "BerserkerDeLaMortQuiTue" en C, loin de là, mais j'avais tout de même compris qu'on parlait de C standard, et pas de C++.
 

KangOl

Grand Maître
Code:
a<<1
est nettement plus rapide que
Code:
a*2
et quand tu codes quelque chose qui doit s'approcher du temps reel, ca fait beaucoup de différence.
 

Dumoria

Habitué
euh ok mais j'ai une petite remarque et une question :
- ca fait une grande différence si ton instruction fait partie des quelques bouts de code les plus parcourus (ex : une boucle d'attente de message). Car statistiquement une grande partie d'un programme est très peu parcourue. Puis bon moi je disais ca comme ça, évidemment il y aura toujours moyen de prouver par a+b que telle instruction prend 3picosecs de moins qu'une autre. Dans ce cas, on se remet tous à coder en assembleur, comme ça c'est réglé.
- a<<1 ca marche bien si tu as un type non signé, mais il me semble qu'avec un "int" classique ca fait n'importe quoi, non ?
 

KangOl

Grand Maître
[citation=9092,0,10][nom]Dumoria a écrit[/nom]
- a<<1 ca marche bien si tu as un type non signé, mais il me semble qu'avec un "int" classique ca fait n'importe quoi, non ?[/citation]
aucune idée ! a verifier :)
 

Dumoria

Habitué
je dois avoir un prog de parcours d'une zone bit à bit dans un coin, je tacherai d'y penser un de ces jours.

Enfin, juste pour dire qu'en C il y a des notations parfaitement substituables (j'emploierai pas gadget, parce qu'apparemment ca peut provoquer de l'urticaire à certains). << en est un très mauvais exemple (je croyais au début mais en fait non),

mais il y a quand même i=i+1 et i++,
(*structure).attribut et structure->attribut,
et surement d'autres...

Enfin voilà quoi... Promis la prochaine fois je fais attention à ce que je dis. :D
 

KangOl

Grand Maître
effectivement, en c, il y a toujours moyen de compliquer l'ecriture pour un résultat identique :o
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 134
Messages
6 718 076
Membres
1 586 394
Dernier membre
Manoushk
Partager cette page
Haut