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

Lazarus Pascal Discussion :

Meilleure approche pour une valeur sur 12 bits [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de der§en
    Homme Profil pro
    Bretagne
    Inscrit en
    Septembre 2005
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bretagne
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 088
    Par défaut Meilleure approche pour une valeur sur 12 bits
    Bonjour,

    Quelle serait pour vous la meilleure solution pour coder dans un WORD une valeur non-signée sur 12 bits complétée par une autre sur 4 bits ?

    Le tout pouvant être utilisé dans des tableaux !

    Quelle serait votre approche ?

  2. #2
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 173
    Billets dans le blog
    9
    Par défaut
    Bonjour !

    Je ne sais pas si c'est la meilleure solution, mais personnellement j'aurais fait quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    {$ASSERTIONS ON}
     
    type
      T1 = 0..4095;
      T2 = 0..15;
     
    function Encode(const v1: T1; const v2: T2): word;
    begin
      result := (v1 shl 4) or v2; 
    end;
     
    procedure Decode(const w: word; out v1: T1; out v2: T2);
    begin
      v1 := w shr 4;
      v2 := w and 15; 
    end;
     
    var
      w: word;
      v1: T1;
      v2: T2;
     
    begin
      Assert(%1111111111111111 = 65535);
      Assert(%111111111111 = 4095);
      Assert(%1111 = 15);
     
      w := Encode(4095, 15);
      Assert(w = 65535);
     
      Decode(w, v1, v2);
      Assert(v1 = 4095);
      Assert(v2 = 15);
     
      Randomize;
      v1 := Random(4096);
      v2 := Random(16);
      WriteLn(v1);
      WriteLn(v2);
      w := Encode(v1, v2);
      Decode(w, v1, v2);
      WriteLn(v1);
      WriteLn(v2);
    end.

  3. #3
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 644
    Par défaut Entassés
    Bonjour,

    Il existe aussi des enregistrements qui proposent la compression binaire comme cela si je ne fais pas erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    TStrange = bitpacked record 
      T1 = 0..4095;
      T2 = 0..15;
    end;
    Mais je suis loin d'être sûr que c'est pertinent en efficacité comme en lisibilité (le moindre usage demandera des transtypages un peu partout que la solution de Roland masque).

    Salutations.

  4. #4
    Membre chevronné Avatar de der§en
    Homme Profil pro
    Bretagne
    Inscrit en
    Septembre 2005
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bretagne
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 088
    Par défaut
    Pourquoi, il faudrais des transtypages partout, cette affirmation me laisse un peu dubitatif...

    je vais faire des essais pour comprendre ta remarque.

  5. #5
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 644
    Par défaut Casting et transtypage
    Bonjour,

    Normalement Pascal est un langage typé et devrait interdire un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var
       i : Cardinal:   // ou Word...
       Strange : TStrange;
    //...
    i := Strange.T1;
    et demander :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    i := Cardinal(Strange.T1);
    A vérifier le degré de tolérance du compilateur FreePascal.

    Il y a aussi la possibilité de déclarer des types TCard12 = 0..4095; et TNibble = 0..15; mais cela ne recule le problème que d'un cran car le reste du programme utilisera certainement d'autre types plus communs.

    Sur ce plan, C et C++ paraissent plus souples avec leurs champs binaires typés.

    Salutations

  6. #6
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 934
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 934
    Billets dans le blog
    6
    Par défaut
    Il est possible d'affecter un Byte à un Int64 sans trranstypage, pourquoi pas un sous-ensemble à un Word ? A tester en tout cas.

    Autre voie possible, celle des helpers, peut-être plus "naturelle" ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 05/01/2014, 22h32
  2. [MVVM] quelle est la meilleure approche pour afficher une liste d'images ?
    Par SIC83 dans le forum Silverlight
    Réponses: 0
    Dernier message: 21/10/2012, 11h50
  3. [Toutes versions] Formule pour recuperer une valeur sur un autre fichier Excel
    Par bonilla dans le forum Excel
    Réponses: 2
    Dernier message: 26/06/2012, 11h19
  4. Réponses: 3
    Dernier message: 04/01/2012, 09h00
  5. Réponses: 1
    Dernier message: 21/02/2010, 08h42

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