minet03
Messages postés415Date d'inscriptionsamedi 4 janvier 2003StatutMembreDernière intervention 2 décembre 2005
-
24 août 2005 à 17:50
steve_clamage
Messages postés475Date d'inscriptiondimanche 3 octobre 2004StatutMembreDernière intervention11 août 2006
-
25 août 2005 à 22:29
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é ?!
vinc1008881
Messages postés257Date d'inscriptiondimanche 22 août 2004StatutMembreDernière intervention29 septembre 20103 24 août 2005 à 18:40
#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*/
cosmobob
Messages postés700Date d'inscriptionmardi 30 décembre 2003StatutMembreDernière intervention27 janvier 20094 25 août 2005 à 11:01
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 ...)
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 24 août 2005 à 18:18
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
dark_naruto25
Messages postés127Date d'inscriptionmardi 23 août 2005StatutMembreDernière intervention 9 mai 2011 25 août 2005 à 19:19
Exact !
Pi il y a toujours possibilité de combiné plusieur entier... genre une
option qui en inclue plusieurs... reprenon l'exemple de 2 et 8 au lieu
de passé 2 et 8 on peu passé 10 qui regroupe les 2.