Masquage de bit [Résolu]

runo 26 Messages postés mercredi 5 octobre 2005Date d'inscription 15 avril 2011 Dernière intervention - 9 nov. 2005 à 12:57 - Dernière réponse : philippe laschweng 1 278 Messages postés jeudi 14 avril 2005Date d'inscription 13 avril 2013 Dernière intervention
- 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
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 9 nov. 2005 à 13:23
3
Merci
AND et OR .... rien besoin de plus ...

If ( portD0 And 8 ) Then ...

Merci Renfield 3

codes-sources a aidé 82 internautes ce mois-ci

ScSami 1490 Messages postés mercredi 5 février 2003Date d'inscription 3 décembre 2007 Dernière intervention - 9 nov. 2005 à 16:47
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". )
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 9 nov. 2005 à 17:06
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)
ScSami 1490 Messages postés mercredi 5 février 2003Date d'inscription 3 décembre 2007 Dernière intervention - 9 nov. 2005 à 17:30
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
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 9 nov. 2005 à 18:07
philippe laschweng 1 278 Messages postés jeudi 14 avril 2005Date d'inscription 13 avril 2013 Dernière intervention - 9 nov. 2005 à 21:51
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
ScSami 1490 Messages postés mercredi 5 février 2003Date d'inscription 3 décembre 2007 Dernière intervention - 10 nov. 2005 à 00:46
0
Merci
Merci beaucoup les gars pour toutes ces précieuses (à mes yeux) infos
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 10 nov. 2005 à 07:32
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
philippe laschweng 1 278 Messages postés jeudi 14 avril 2005Date d'inscription 13 avril 2013 Dernière intervention - 10 nov. 2005 à 10:33
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
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 10 nov. 2005 à 10:47
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
philippe laschweng 1 278 Messages postés jeudi 14 avril 2005Date d'inscription 13 avril 2013 Dernière intervention - 10 nov. 2005 à 11:16
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
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 10 nov. 2005 à 11:35
0
Merci
16, si, mais pas en binaire

Hex$( ) pour conversion vers hexa

dans l'autre sens :
MaVal = "C0"
DecimalValue = Val ( "&h" & MaVal )
ScSami 1490 Messages postés mercredi 5 février 2003Date d'inscription 3 décembre 2007 Dernière intervention - 10 nov. 2005 à 15:16
0
Merci
Je crois qu'il existe aussi une fonction de convertion octale!
philippe laschweng 1 278 Messages postés jeudi 14 avril 2005Date d'inscription 13 avril 2013 Dernière intervention - 10 nov. 2005 à 15:44
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.