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

JavaScript Discussion :

Affection de bits dans une variable JS


Sujet :

JavaScript

  1. #1
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Points : 470
    Points
    470
    Par défaut Affection de bits dans une variable JS
    Bonjour,

    Voilà, afin d'optimiser un script JS, je souhaite convertir 4 variables en un entier écrivant ce dernier bit par bit.

    Concrètement, j'ai 4 test a effectuer. Chacune des valeurs de retour de ces 4 test doit correspondre à un bit dans la variable que je souhaite affecter (qu'on appelera "resultat").

    admettons que "resultat" soit initialisé à 0, que l'on peut écrire en binaire 0000 (je fait abstraction des 28 0 de gauches).

    les 4 test sont des comparaison numériques simples entre les variables a, b c et d et une valeur de reference X.

    Je veux que "resultat" contienne en binaire :
    (a > X)(b > X)(c > X)(d > X).

    De cette façon, si a et c sont supérieurs à X, "resultat" s'écrira en binaire :
    1010
    donc resultat = 10 en décimal.

    La question est comment écrire ça en JS ? j'ai regardé du cotés des opérateur de décalage de bit, mais je ne voient pas comment ils pourraient m'aider...

    Pour ceux qui se demanderait quelle est l'intérêt de faire ça, c'est pour pouvoir ensuite taper directement dans un tableau de fonctions indexé par tous les cas de figure possible de mon test.

    En vous remerciant par avance.

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 664
    Points
    66 664
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var M=(a > X)?1:0;
    var C=(b > X)?1:0;
    var D=(c > X)?1:0;
    var U=(d > X)?1:0;
    var resultat=M*1000+C*100+D*10+U
    après ça dépend si tu veux du string ou de l'integer mais si M=0 ...
    sinon sur le principe du chmod avec les puissances de 2

  3. #3
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Points : 470
    Points
    470
    Par défaut
    Arf, je me suis mal fait comprendre (en plus, je réalise que j'ai mis "affection" au lieu de "affectation" dans mon titrte)...

    Je ne veux pas que resultat contienne la valeur binaire affichée avec des caractères décimaux, mais bien que resultat corresponde a une valeur comprise entre 0 et 15 en décimal, ce qui correspond à des valeurs comprises entre 0000 et 1111 en binaire...

    d'où l'exemple de ce que je cherche a obtenir :
    Je veux que "resultat" contienne en binaire :
    (a > X)(b > X)(c > X)(d > X).
    De cette façon, si a et c sont supérieurs à X, "resultat" s'écrira en binaire :
    1010
    donc resultat = 10 en décimal.
    Mais merci quand même pour la tentative de réponse ^^

  4. #4
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Points : 470
    Points
    470
    Par défaut
    Remarque, ta réponse m'inspire un peu :p

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    resultat = (d>X?1:0)+(c>X?2:0)+(b>X?4:0)+(a>X8?8:0);
    Si y'a plus élégant, je suis preneur, sinon je cocherai résolu...

  5. #5
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 664
    Points
    66 664
    Billets dans le blog
    1
    Par défaut
    arf désolé j'avais pris le problème à l'envers
    A la limite c'est plus simple dans ce sens là
    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
    <script type='text/javascript'>
    Array.prototype.Flength=function(taille){
              tempFormat=this
    			while (tempFormat.length<4){tempFormat.unshift('0')}
    			return tempFormat;
    			}
     
    a=20
    b=10
    c=60
    d=100
    X=200
     
    var result=0
    result+=((a > X)?Math.pow(2,0):0)+((b > X)?Math.pow(2,1):0)+(result+=(c > X)?Math.pow(2,2):0)+((d > X)?Math.pow(2,3):0);
    alert(result)
    var binresult=result.toString(2).split('').Flength(4).join('')
    alert(binresult)
     
     
    </script>
    peut être un poil plus élégant que ta solution (en tout cas au niveau de la lisibilité du code avec les puissances de 2

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    Bonjour,

    Code trouvé sur le net :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
          function bindec (binary_string) 
          {
          // http://kevin.vanzonneveld.net
          // +   original by: Philippe Baumann
          // *     example 1: bindec('110011');
          // *     returns 1: 51
          // *     example 2: bindec('000110011');
          // *     returns 2: 51
          // *     example 3: bindec('111');
          // *     returns 3: 7
     
          binary_string = (binary_string+'').replace(/[^01]/gi, '');
          return parseInt(binary_string, 2);
          }
    Ici :
    http://kevin.vanzonneveld.net/techbl...r_phps_bindec/

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

Discussions similaires

  1. [MySQL] Affecter 2 zones dans une variable
    Par Judgelolo dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 15/07/2012, 04h16
  2. affectation d'un nom de classeur ouvert dans une variable
    Par nolive915 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/09/2006, 10h55
  3. Réponses: 3
    Dernier message: 06/09/2006, 09h06
  4. Affecter valeur d'un champ dans une variable
    Par Sly2k dans le forum Access
    Réponses: 3
    Dernier message: 17/08/2006, 09h43
  5. Réponses: 2
    Dernier message: 17/08/2005, 14h40

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