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

Langage Delphi Discussion :

Travailler avec des bits


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    mars 2002
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : mars 2002
    Messages : 33
    Points : 83
    Points
    83
    Par défaut Travailler avec des bits
    Bonjour à tous,

    Je recois comme paramétres le numéro du bit et sa valeur par exemple (6, false), et j'aimerais avec ca remplir un byte et le convertir en integer.

    exemple:
    valeur de départ : 01001010
    (6, false)
    valeur d'arrivée : 00001010
    En integer: 10

    J'ai essayé avec la fonction suivante mais je n'arrive pas à récuperer la valeur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure
    var
      i : integer;
      Value: TBits;
    begin
      Value.Size := 8;
      Value.Bits[ValueBit] := false;  //value bit = 6 
    end;
    Est-ce que quelqu'un pourrait m'orienter pour trouver une solution simple... surtout que je sais que c'est très simple car en assembleur c'est fait en 2 lignes mais je n'ai pas envie de mettre de l'assembleur dans mon code.

    Valentin

  2. #2
    Nouveau membre du Club
    Inscrit en
    juin 2002
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : juin 2002
    Messages : 24
    Points : 28
    Points
    28
    Par défaut
    delphi ne manipule pas le bit à bit, il faut donc passer par les opérateurs and&cie.

    pour mettre le bit à 1 : valeur or 2^rangbit
    pour le mettre à 0 : valeur and not(2^rangbit)

  3. #3
    Membre habitué

    Profil pro
    Inscrit en
    octobre 2002
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2002
    Messages : 66
    Points : 127
    Points
    127
    Par défaut
    Pour manipuler les bits, il faut utiliser les mêmes fonctions que tu trouves en assembleur, soit Not , And, Or , Xor , Shl , Shr .

    Prenons un exemple : j'ai le nombre 10 = 1010 en binaire .
    Je veux inverser le bit n°3 -> 10 XOR (2^(3 - 1)) = 14 décimal = 1110 binaire !! Inversement, 14 Xor 4 = 10 décimal .

    => nombre de départ XOR [ 2 ^ (position bit souhaité - 1) ]

    A+
    Consultez :
    - La F.A.Q Delphi + Les Cours Delphi
    - La sélection des Freewares Delphi

  4. #4
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : mai 2002
    Messages : 8 640
    Points : 19 091
    Points
    19 091
    Par défaut
    Attention, l'opérateur ^ retourne une valeur flotante et dans tous les cas c'est très long. Il faut utiliser SHL à la place.

    Mettre un bit à 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Valeur:=Valeur Or (1 Shl (numbit-1));
    Mettre un bit à 0 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Valeur:=Valeur And Not(1 Shl (numbit-1));
    Inverser un bit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Valeur:=Valeur Xor (1 Shl (numbit-1));
    Delphi :
    La F.A.Q. , 877 réponses à vos questions !
    264 sources à consulter/télécharger !

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    mars 2002
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : mars 2002
    Messages : 33
    Points : 83
    Points
    83
    Par défaut
    C'est bon ca a marché.

    Merci beaucoup pour vos réponses si clairs et si rapides. Je suis toujours épaté de la puissance de ces forums

    Valentin B.

    ET VIVE L'INTERNET LIBRE!!!

  6. #6
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : mai 2002
    Messages : 8 640
    Points : 19 091
    Points
    19 091
    Par défaut
    Je viens de voir que j'ai répondu des bétises

    Le premier bit est le bit 0, donc il faut écrire :

    Mettre un bit à 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Valeur:=Valeur Or (1 Shl numbit);
    Mettre un bit à 0 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Valeur:=Valeur And Not(1 Shl numbit);
    Inverser un bit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Valeur:=Valeur Xor (1 Shl numbit);
    Désolé..........
    Delphi :
    La F.A.Q. , 877 réponses à vos questions !
    264 sources à consulter/télécharger !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment travailler avec des bits ?
    Par supergrey dans le forum C++
    Réponses: 14
    Dernier message: 27/02/2008, 16h58
  2. Travailler avec des gifs animés
    Par Commodore dans le forum Imagerie
    Réponses: 1
    Dernier message: 13/07/2006, 15h58
  3. Réponses: 8
    Dernier message: 09/03/2006, 17h48
  4. Travailler avec des hexadécimaux
    Par LEK dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 18/09/2005, 04h24
  5. Réponses: 3
    Dernier message: 25/01/2005, 11h27

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