Masquage de bit [Résolu]

Messages postés
26
Date d'inscription
mercredi 5 octobre 2005
Dernière intervention
15 avril 2011
- - Dernière réponse : philippe laschweng 1
Messages postés
278
Date d'inscription
jeudi 14 avril 2005
Dernière intervention
13 avril 2013
- 10 nov. 2005 à 15:44
Jai une petite question :

je lis le port parallèle de mon PC :

portD0 = Inp(PortAddress)

Avec cette fonction, je recupère la valeur du port, mais j'aimerais
savoir comment vérifier l'état d'un seul bit ? Par exemple je veux
tester si le bit 0 est à 1 ?



Idem, lorsque j'ecris sur le port, est-il possible de n'écrire que certains bits ?



Merci pour l'aide.
Afficher la suite 

14 réponses

Meilleure réponse
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
60
3
Merci
AND et OR .... rien besoin de plus ...

If ( portD0 And 8 ) Then ...

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 124 internautes nous ont dit merci ce mois-ci

Messages postés
1490
Date d'inscription
mercredi 5 février 2003
Dernière intervention
3 décembre 2007
26
0
Merci
Explique moi ça Renfield stp !!!
Y'a quand même un truc que j'ai pas du piger au nivo de la manipulation binaire via les fonctions logiques!!!
Si tu pouvais me faire un petit topo voire (mais je voudrais pas te donner trop de travail), un tuto sur ce sujet pourtant si fondamentale!

Sinon, tu vas peut-être me prendre pour un lourdingue mais j'ai chercher partout, et en VB6, j'ai pas trouvé ta fonction ChrW !!! Es-tu vraiment certain que ce n'est pas d'une API dont tu parlais et si non, y'a-t-il d'autres fonctions du genre ???

Enjoy

<hr size="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
60
0
Merci
Pour vérifier l'êtat du 4ème bit, par exemple, on fera par exemple

Input = 14
If (Input And 8) Then
'# Le 4ème bit, qui représente la valeur 8, est à 1
End if

14 -> 1110 en binaire
8 -> 1000 en binaire
l'opération And ne prenant que les bits en commun, on obtient :
14 And 8 -> 1000

--------------------

Dans VB
F2 > recherche de "ChrW" :

Function ChrW(CharCode As Long)
Membre de VBA.Strings
Renvoie une chaîne contenant le caractère natif spécifié (Unicode ou ANSI)
Messages postés
1490
Date d'inscription
mercredi 5 février 2003
Dernière intervention
3 décembre 2007
26
0
Merci
Mais alors, explique moi l'utilité de OR et de XOR s'il te plait...

Enjoy

<hr size="2" width="100%">
Je vais chercher mieux pour ChrW... Merci du tuyau
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
60
Messages postés
278
Date d'inscription
jeudi 14 avril 2005
Dernière intervention
13 avril 2013
0
Merci
Oui il faut utiliser un masquage logique !


Mais je crois qu'en VB tu ne peux pas utiliser les fonctions logiques (AND, OR...) avec des mots binaires directement. Exemple :
0011 AND 1110 te donne en théorie 0010. Mais je crois que VB n'accepte pas directement cette écriture (pas comme du VHDL). Je me trompe peut être ... mais je crois pas. Il n'accepte que ces fonctions entre 2 bits. Mais tu peux facilement te construire une fonction pour cela.

Pour masquer des bits, tu fais en principe un ET logique avec ton octet (exemple 8 bits) et un second octet ou tu mets les bits à masquer à 0 (les autres étant à 1). Mais tu peux aussi utiliser in InStr() si tu veux isoler un bit en particulier même si ca n'est pas le plus judicieux je te l'accorde ..

Mais c'est vraie qu'en logique booléenne tu fais tout avec les opérateurs AND, OR, XOR (inverseur commandé) etc ...

Phil
Messages postés
1490
Date d'inscription
mercredi 5 février 2003
Dernière intervention
3 décembre 2007
26
0
Merci
Merci beaucoup les gars pour toutes ces précieuses (à mes yeux) infos
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
60
0
Merci
Phil, je t'assure, VB accepte bien AND et OR pour les opérations binaires....

Amusez-vous !
Renfield - thomas_reynald@msn.com
Admin CodeS-SourceS - MVP Visual Basic
Messages postés
278
Date d'inscription
jeudi 14 avril 2005
Dernière intervention
13 avril 2013
0
Merci
Renfield : je sais bien que VB accepte AND et OR pour les opérations binaires mais tu as du mal comprendre ou je me suis mal expliqué. Ce que je voulais dire, peut être que je me trompe, mais je ne suis pas arrivé à faire par exemple un AND bit à bit sur un octet complet, du genre :
000011111 AND 01010101 = 00000101.
VB n'est pas capable de te donner ce résultat directement. Les opérations ne marche que bit à bit.
Ce n'est pas comme avec du VHDL (langage de description hardware) par exemple qui accepte fort heureusement ce type d'opération.
En VB pour faire l'opération du dessus, je me suis fabriqué des fonctions simples mais je n'ai pas trouvé le moyen de faire l'opération directement.
Mais je me répéte je n'affirme rien, j'ai constaté et je n'ai peut être pas trouvé la solution ...

A vous de me dire ...
Phil
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
60
0
Merci
tu peux pas mettre tes chiffres direct en binaire, mais VB fais bien l'opération

31 and 85 => 21

ce qui fais bien :
000011111 AND 01010101 = 10101

a moins que je comprenne mal ce que tu veux me dire
Messages postés
278
Date d'inscription
jeudi 14 avril 2005
Dernière intervention
13 avril 2013
0
Merci
Oui tu as raison en décimal cela fonctionne. Je n'avais jamais essayé en décimal car je n'y ai jamais pensé vu que mon raisonnement était binaire. Mais c'est un peu bête que VB n'accepte direct du binaire. Pareil je crois (peut être ai-je encore tout faut) qu'il n'existe pas de fonction DIRECTE pour faire des conversions classiques base16 --> base10, base10 -- > base2 ...

Ce qui veut dire que si tu veux faire un ET logique entre deux octets (par exemple), tu es obligé de convertir dans un premier temps les deux octets de b2 en b10, faire l'opération et reconvertir le résultat de b10 en b2. En plus il te faut un module pour convertir b2 en b10 et b10 en b2 (j'ai une fois trouvé un module sur le net qui fait toute les conversions dans toutes les bases).

Sinon, devant ce problème j'avais dans le passé carrément réalisé une fonction qui utilise le AND mais bit à bit pour chaque bit des deux mots binaires (en parallèle).

En tout cas meri pour tes explications, j'aime bien cherché à comprendre ce que je ne comprends pas !! lol


Phil
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
60
0
Merci
16, si, mais pas en binaire

Hex$( ) pour conversion vers hexa

dans l'autre sens :
MaVal = "C0"
DecimalValue = Val ( "&h" & MaVal )
Messages postés
1490
Date d'inscription
mercredi 5 février 2003
Dernière intervention
3 décembre 2007
26
0
Merci
Je crois qu'il existe aussi une fonction de convertion octale!
Messages postés
278
Date d'inscription
jeudi 14 avril 2005
Dernière intervention
13 avril 2013
0
Merci
Oui le Hex je conaissais mais binaire rien trouvé dessus !

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.