Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Opérateur bit à bit [ Archives / Au secours ] (minet03)

mercredi 24 août 2005 à 17:50:36 | Opérateur bit à bit

minet03

Hello !

J'ai demandé l'autre soir sur #Programmation comment fonctionnais le passage de plusieurs DWORD sur le même paramètre DWORD de la fonction (ex.: CreateWindowEx(...,WS_VISIBLE | WS_CHILD,...) ).
Je n'avais pas du tout pensé aux opératur bit à bit, en l'occurence le OU " | " ( merci à raskolinov de me l'avoir dit).
Ensuite j'ai cherché une méthode donc pour retrouver ces éléments passés avec un OU, je doit dire que je me suis limité au OU...
J'ai donc redemandé sur le chan une aide supplémentaire, en retour j'ai eu droit à ceci : " if( dwStyle & WS_VISIBLE ) { ... }" (merci à aadrman).
J'ai donc fais une petite fonction :
void Fonction(DWORD dwEntier,DWORD dwTest)
{
    if( dwEntier & dwTest ) printf("Wouha !!!\n");
    else printf("Berk !!!\n");
}

que j'ai lancé plusieurs fios de suite :
Fonction(2 | 8 , 2);
Fonction(2 | 8 , 5);
Fonction(2 | 8 , 8);
Fonction(2 | 8 , 10);
Fonction(2 | 8 , 9);
Fonction(2 | 8 , 12);


Et voilà ce que j'obtiens au lancement :
Wouha !!!
Berk !!!
Wouha !!!
Wouha !!!
Wouha !!!
Wouha !!!


Alors voilà, je me demandais quelle étape j'avais loupé ?!

Le CyberMonde nous offre une meilleur qualité de vie
CyberMan.inc The WebSite

mercredi 24 août 2005 à 18:17:33 | Re : Opérateur bit à bit

steve_clamage

En arithmétique binaire 10 == 8 | 2, 9 == 10 | 1 donc tu vois que ce que tu obtiens est cohérent ?
C'est quoi le problème excatement ?


mercredi 24 août 2005 à 18:18:37 | Re : Opérateur bit à bit

vecchio56

Administrateur CodeS-SourceS
10=8+2=8|2 Donc c'est Wouha!!! Si tu n'est pas a l'aise avec la base 10, met tout en décimal, et essaie de comprendre pourquoi on utilise l'opérateur & 8|2, ca te donne 1010b=10 (8|2)&5 = (1010b)&(101b)=0 (aucun bit en commun) par contre (8|2)&10 = (1010b)&(1010b) = 10 != 0

mercredi 24 août 2005 à 18:40:27 | Re : Opérateur bit à bit

vinc1008881

Réponse acceptée !
#include <stdio.h>


unsigned const char SALU = 128; /*(10000000 en binaire)*/
unsigned const char COMMENT = 64; /*(01000000 en binaire)*/
unsigned const char SA = 32; /*(00100000 en binaire)*/
unsigned const char VA = 16; /*(00010000)*/
unsigned const char BIEN= 8; /*(00001000)*/
unsigned const char MAL = 4; /*(00000100)*/
unsigned const char BOF = 2; /*(00000010)*/
unsigned const char OUER = 1; /*(00000001)*/

void je_retrouve (unsigned char c);

int main ()
{
je_retrouve (SALU | COMMENT | SA | VA | BIEN); /*10000000 | 01000000 | 00100000 | 00010000 | 00001000  = 11111000, on transmet donc à la fonction la variable 11111000*/
printf (" ?\n");
je_retrouve (SA | VA | MAL);/*00100000 |00010000 |00000100 = 001010100, on tranmet à la fonction le nombre 001010100*/
getch ();
return 0;
}

void je_retrouve (unsigned char c) /* Ici on effectue un et binaire pour voir si la bits que l'on veur est à 0 ou à 1*/
{
if (c & SALU)printf ("salu ");
if (c & COMMENT)printf ("comment ");
if (c & SA)printf ("sa ");
if (c & VA)printf ("va ");
if (c & BIEN)printf ("bien ");
if (c & MAL)printf ("mal ");
if (c & BOF)printf ("bof ");
if (c & OUER)printf ("ouer ");

}



mercredi 24 août 2005 à 18:43:59 | Re : Opérateur bit à bit

vinc1008881


oops j'ai oublier le commentaire : cette fonction retouve les mot que on lui a passée, sa repond a ta question ?

jeudi 25 août 2005 à 11:01:32 | Re : Opérateur bit à bit

cosmobob

Réponse acceptée !
salut,
l'idée quand tu fais un truc du genre, c'est que les flags a positionner ne possedent en binaire qu'un seul 1 : cela revient a choisir des entiers qui sont des puissances de 2 (1,2,4,8,16,32, ...en binaire 32 s'ecrit 100000, etc.)
exemple:
#define FLAG0 1
#define FLAG1 2
#define FLAG2 4
#define FLAG3 8
#define FLAG4 16

DWORD res = (FLAG1 | FLAG3);
if (res & FLAG0)
   printf("flag0 positionne\n");
if (res & FLAG1)
   printf("flag1 positionne\n");
if (res & FLAG2)
   printf("flag2 positionne\n");
if (res & FLAG3)
   printf("flag3 positionne\n");
if (res & FLAG4)
   printf("flag4 positionne\n");

si tu fais (res & 5) tu obtiendras "flag0 positionne" mais ca n'est pas "forcement" pertinent car 5 n'est pas une puissance de 2.
Avec un entier tu peux positionner jusqu'a 32 flags (un entier est codé sur 32 bits ...)
Tu pouvais aussi faire ca:
#define FLAG0 (1 << 0)
#define FLAG1 (1 << 1)
#define FLAG2 (1 << 2)
#define FLAG3 (1 << 3)
#define FLAG4 (1 << 4)

voila; bonne méditation


jeudi 25 août 2005 à 16:54:54 | Re : Opérateur bit à bit

minet03

Donc si je comprend bien (en gros), le param sera comme un registre d'option de 32 bits dont chaque bit représente une "option"(donc un flag)... ?
Cel dit que vérifié le if ?
if( (2 | 8) & 2 ) ==> if( 1010b & 0010b ) ==> if( 0010b ) donc que vérif le if, ou alors est ce mon résonnement qui est faux ???

Le CyberMonde nous offre une meilleur qualité de vie
CyberMan.inc The WebSite

jeudi 25 août 2005 à 17:13:44 | Re : Opérateur bit à bit

vecchio56

Administrateur CodeS-SourceS
Je pense que ton raisonnement est bon et que tu as compris, mais j'ai pas trop compris ta phrase 'Cel dit que vérifié le if ?'

jeudi 25 août 2005 à 18:04:46 | Re : Opérateur bit à bit

minet03

dsl, je demandais tout simplement que vérifie le if puisque que en gros ça donne if( 1010 ) ? C'est à dire, littéralement : SI 10 ALORS...

Le CyberMonde nous offre une meilleur qualité de vie
CyberMan.inc The WebSite

jeudi 25 août 2005 à 18:07:33 | Re : Opérateur bit à bit

vecchio56

Administrateur CodeS-SourceS
Réponse acceptée !
Tout entier différent de 0 signifie vrai, et 0 signifie faux


1 2

Cette discussion est classé dans : fonction, ws, dword, bit, wouha


Répondre à ce message

Sujets en rapport avec ce message

transformer un jour du mois en DWORD [ par myocean ] Dans le cas de la structure AT_INFOla variable DaysOfMonth est au format DWORD et elle recoit comme paramêtre des bit où le bit 0 est le 1er du mois waveInOpen [ par evildido ] Bonjour à tous. J'ais une tite question pour vous. Pour mon projet j'utilise les MFC et j'aimerais lorsqu'on appuis sur un bouton lancer une capture s Passer un pointeur sur une instance à une fonction membre static ? [ par tintin72 ] Bonjour, j'ai un problème pour passer un pointeur sur une instance ou l'adresse de l'instance à une fonction callback Windows. Je m'explique J'ai créé creation d'une listview dans une boite de dialogue en ressource [ par ebooserge ] salut a tous,voila j'ai un petit probleme avec les listview.dans mon fichier ressources, j'ai créé une boite de dialogue avec des static, des boutons Fonction et string, Bug ? [ par FeelCode ] Hellobon je me suis mis aux c++ .net  soiyer indulgent. IDE visual expresse 2005 .netje ne parvien pas a faire un fonction qui rencvoiye une string. j Probleme de timer avec fonction de callback [ par julienbj ] Bonjour,j'ai un petit souci lors de la création d'un timer avec une fonction de callback.Voici un bout de code qui ne fonctionne pas, mais je ne vois Fonction identique à memset mais pour les DWORD [ par bouba ] Bonjour, j'ai besoin de réaliser une copie de plusieurs DWORD dans un buffer mémoire. En faire je cherche l'identique de la fonction memset mais pour Utilisation de fonctions Callback [ par N0euX ] Bonjour a tous,</o: combobox [ par fignon ] Bonjour à tous,j'ai un petit souci avec les combobox, dont je suis sûr vous n'aurez aucun mal à résoudre.Je déclare ma combobox comme suit :edit_port_ lire un fichier binaire bit par bit [ par MrDimanche ] Bonjour,Voila mon problème : j'ai un fichier binaire à lire, et j'utilise un "ifstream" puit get... Ca marche très bien, mais ça lit les données octet


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,218 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.