IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

[] Role d'un And entre entiers [Débat]


Sujet :

VB 6 et antérieur

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2003
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Août 2003
    Messages : 7
    Points : 5
    Points
    5
    Par défaut [] Role d'un And entre entiers
    Salut à tous,

    Je cherche à comprendre (simplement comprendre) quel résultat, sous forme d'entier, renvoie un And entre entiers. Je m'explique :

    J'ai le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim FileLine
    Dim LineAddr as Long
    FileLine = Infile.ReadLine
    LineAddr = (Val("&H1" & Mid(FileLine, 4, 4)) And 65535)
    InFile est mon fichier d'Input, j'en recupère une ligne dans FileLine; Val(...) va lire les quatre caractères situés aux index 4 à 7, concatène à &H1 pour donner un hexa du type &H1uuuu, et retourne sa valeur décimale; jusque là tout va bien.

    Mais mon problème est de savoir quelle opération effectue le And entre cette dernière valeur d'une part, et 65535 d'autre part ??

    Merci d'avance !

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    J'ignore ce que donne le and entre deux entiers... pisc...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Vala = 10000
    valb = 30000
    Résultat = (Vala And valb)   ' = 9488
    Bref, c'est pas comme en c

    Quelle utilisation veux-tu en faire ?

    A+

  3. #3
    Futur Membre du Club
    Inscrit en
    Août 2003
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Août 2003
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Quand je disais que je veux juste comprendre, c'est justement parce que je déchiffre un code existant pour le transcrire en C. Et juste après avoir posté, je me suis dit : et si j'essayais un bon vieux "&" dans mon C ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sscanf(word2,"%x",&LineAddr);
    LineAddr = (LineAddr & 65535);
    Juste un bout de C pour montrer.
    Et là, ô miracle, ca marche !! j'entends par là que j'obtiens le même résultat qu'avec le code VB. par contre, je sais toujours pas comment ca marche...Alors évidemment, je suis bien content d'avoir une solution, mais ca me gêne d'avoir une ligne de code dont j'ignore ce qu'elle fait !

    Citation Envoyé par ouskel'n'or
    Bref, c'est pas comme en c
    Et bien...je me le demande, quand même... Et au passage, le "&" que j'ai utilisé, il est sensé faire quoi en C ? (oui oui je sais, je suis pas dans le bon forum )
    En tout cas, merci du coup de main

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut

    J'ai justement confondu and et &... Puisque en C, le & effectue (il semble me souvenir) une comparaison bit à bit. (souvenirs datant de 1990-91)

    En VB, pour remplacer, j'ai trouvé Like. Ex :

    on transforme juste les valeurs en string avant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    a = "11010111011" 
    b = "00010011001" 
    ok = a like b 
    ok = true si a contient b bit à bit
    M'a permis en quelques lignes de vérifier plus de 120 conditions sans un seul if.

    C'était juste pour parler...

    A+

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    décimal binaire décimal
    30000 111010100110000
    10000 10011100010000
    10010100010000 9488

    observons 30000 et 10000 en binaire
    là ou il y a deux 1 je mets 1 et sinon 0

    j'obtiens 10010100010000 qui donne 9488 en décimal

    là je suis très heureux soupir de jubilation
    que faire du 9488 ? ben du tri logique pour commencer et puis c'est très fun 9488 on peut jouer des heures avec
    Elle est pas belle la vie ?

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    pour le fun on peut aussi faire not, or, xor
    mais le and est un début honnête
    Elle est pas belle la vie ?

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Merci pour ta réponse, Randomize, ce soir je me coucherai moins idiot...

    A+

  8. #8
    Futur Membre du Club
    Inscrit en
    Août 2003
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Août 2003
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Et ben avec une petite question un peu conne j'apprends plein de choses

    Mais j'avoue que j'ai toujours un peu de mal à piger le pourquoi de l'intérêt du comment de la chose...

    Dans mon prog à moi, j'utilise (enfin le mec qui a pondu le code VB utilise) ca pour déterminer une adresse à programmer dans un µC (DsPIC pour être précis) : c'est-à-dire qu'il lit l'adresse contenue dans la ligne d'un fichier .hex, il compare (puisque c'est donc bien une comparaison) à 65535, et attribue le résultat à l'adresse finale. Alors encore une fois, c'est beau, ca marche, mais il y a une part non négligeable d'obscurité miraculeuse dans ce code......

  9. #9
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Salut

    Pour information générale...

    J'ai appris cette semaine au collège, que les comparaisons bit à bit peuvent être parfois bien utiles. Dans le cas d'une adresse IP par exemple, le Système fait une opération AND sur l'adresse IP et le masque de réseau pour déterminer la passerelle par défaut.

    Par exemple (j'improvise n'importe quoi comme adresse), l'adresse IP 168.14.230.48 avec un masque (de classe B) 255.255.0.0 donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        10101000.00001110.11100110.00110000
    AND 11111111.11111111.00000000.00000000
        -----------------------------------
        10101000.00001110.00000000.00000000
    qui donne 168.14.0.0

    Il suffit de faire une table de vérité pour trouver le résultat (a mano!)

    And:
    1 and 1 = 1
    1 and 0 = 0
    0 and 1 = 0
    0 and 0 = 0

    Or:
    1 or 1 = 1
    1 or 0 = 1
    0 or 1 = 1
    0 or 0 = 0

    XOr:
    1 xor 1 = 0 // ou exclusif , ou bien un, ou bien l'autre, mais pas les deux
    1 xor 0 = 1
    0 xor 1 = 1
    0 xor 0 = 0

    Not:
    not 1 = 0
    not 0 = 1

    Mais personnellement, je n'ai jamais fait d'opération bit à bit avec VB - à moins que je ne m'en sois jamais rendu compte!

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    On utilise ça en automatisme pour conaître l'état instantané d'un process...

    Juste pour dire...

    Salut zaza

    A+

  11. #11
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Dans ce cas-ci, le AND avec 65535 veut dire qu'on va prendre les 16 bits les moins significatifs du nombre.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  12. #12
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Je n'ai jamais fouillé dans les process... je m'en serais rendu compte!

    Je vous laisse entre vous.

    Bye!

  13. #13
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    déja prendre les 16 bits faibles est très utile

    c'est comme travailler sur la partie décimale ou entière d'un nombre
    cela vous arrive à tous
    compléter un masque peut s'apparenter à une opération de rendu de monnaie
    on s'en sert pour faire tenir sous un même format un nombre positif ou négatif ou pour calculer une clef
    de plus ces opérations sont très rapides très proches du systéme et même
    du hard je rajoutes ware pour tuer les illusions des plus lubriques
    Elle est pas belle la vie ?

  14. #14
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    je vous invite à rechercher binaire avec le moteur de recherche
    et tout particulièrement les débordements en arithmétique
    c'es moins périlleux que dans le mississipi
    Elle est pas belle la vie ?

  15. #15
    Futur Membre du Club
    Inscrit en
    Août 2003
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Août 2003
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par AlainTech
    Dans ce cas-ci, le AND avec 65535 veut dire qu'on va prendre les 16 bits les moins significatifs du nombre.
    OK pris comme ca, ca clarifie nettement la situation pour moi.

    Citation Envoyé par random
    de plus ces opérations sont très rapides très proches du systéme et même du hard je rajoutes ware pour tuer les illusions des plus lubriques
    Petit canaillou
    Là aussi ca m'arrange bien que ca soit optimisé, vu que mon µC est quand même pas une bête de course au niveau puissance de calcul.

    Merci à tout le monde en tout cas !

  16. #16
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Juste un truc pour ceux que ça intéresse :

    Avec deux bits, on peut déjà vérifier 4 conditions,
    avec 3 -> 8 conditions,
    avec 4 -> 16
    avec 5 -> 32
    avec 7 -> 128

    Si l'on compare 1111111 à 7 bits représentant l'état combiné de 7 conditions (ex : 01011010) on a donc 128 combinaisons possibles.
    Tout ça avec un like !
    et comme un like évalue deux strings, on peux concaténer les états... Fastoche ! Mieux : On peut même comparer des états "indifférents" en remplaçant un bit par "?" (qui remplace n'importe que caractère...)

    Z'avez déjà essayé ? C'est le pied !

    Juste pour faire l'intéressant ...

    A+

Discussions similaires

  1. maitre and entre les noms des auteurs
    Par texformat dans le forum Bibliographies - Index - Glossaires
    Réponses: 6
    Dernier message: 23/02/2012, 15h25
  2. Réponses: 14
    Dernier message: 12/04/2009, 20h47
  3. Problème entre entiers et réels
    Par Caroline_1 dans le forum Fortran
    Réponses: 5
    Dernier message: 08/03/2009, 13h02
  4. le role de #if and #else sous c#
    Par ouadie99 dans le forum C#
    Réponses: 2
    Dernier message: 04/12/2008, 09h57
  5. Opérateur logique And entre 2 conditions
    Par User dans le forum Langage
    Réponses: 1
    Dernier message: 16/09/2006, 12h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo