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

Shell et commandes GNU Discussion :

Faire un ET binaire entre deux chaines de bits.


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de rufa11
    Consultant informatique
    Inscrit en
    Décembre 2007
    Messages
    300
    Détails du profil
    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 300
    Par défaut Faire un ET binaire entre deux chaines de bits.
    Bonjour,

    SVP je cherche a inverser les bits d'une chaine de caractère binaire, exemple:

    var1=1001 je veux que ça devient 0110 pour faire le complément à 2, pour inversre les bits d'après ce que je sais il faut faire un ET logique, binaire et comme ça les bites seront inversés, donc ça donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var1=1001
    var2=0000
     
    var3=$(echo "$var1 & $var2" | bc) 
    var4=0001
    var5=$(echo "$var3+$var4" | bc)
    Mais quand j'excute le script ça me donne erreur

    SVP c'est quoi le problème ou avez vous une autre solution?

    MErci

  2. #2
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Bonjour.

    Pour le complément à 2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "ibase=2; obase=2; $(echo $var1|sed 's/0/2/g;s/1/0/g;s/2/1/g') + 1"|bc
    ibase=2; obase=2; => pour indiquer le base d'entrée et la base de sortie à bc.
    echo "$var1"|sed "s/0/2/g;s/1/0/g;s/2/1/g" => va faire le complément à 1 en remplaçant les 0 par des 1 et les 1 par des 0 (en passant par une valeur temporaire 2)

    Puis l'addition binaire +1 pour passer au complément à 2 (si mes souvenirs sont bons). Inutile de faire +0001, +1 suffit

    P.S : le complément à 1 ne se fait pas via un ET logique mais via un NON logique (pour inverser chaque bits).
    En gros 0110 = NON(1001) alors que "0110 ET 0000" ça vaut "0000". Si c'est vraiment un "ET" que tu veux faire, ça revient à multiplier var1 et var2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "ibase=2; obase=2; $var1 * $var2"|bc
    Cordialement,
    Idriss

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 872
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 872
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par rufa11 Voir le message
    Mais quand j'excute le script ça me donne erreur

    SVP c'est quoi le problème
    Bonjour
    C'est parce que bc ne connait pas l'opérateur "&"

    Citation Envoyé par rufa11 Voir le message
    d'après ce que je sais il faut faire un ET logique, binaire et comme ça les bites seront inversés
    Ah oui ? Tu as essayé de regarder si 0&0 ou 1&0 ou 0&1 ou bien 1&1 inversait quoi que ce soit ??? Ce n'est pas interdit de réfléchir un petit peu...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 418
    Par défaut
    Bonjour,
    En complément de ok.Idriss:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ VAR1=1010
    $ echo "obase=2;$(( (2#${VAR1} ^ (2**${#VAR1}) -1) +1 ))" | bc
    110
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo $VAR1 | sed -e 'y/01/10/;:bcl;s/1\(2*\)$/2\1/;tbcl;s/^\(2*\)$/0\1/;s/0\(2*\)$/1\1/;y/2/0/'
    0110

  5. #5
    Membre éclairé Avatar de rufa11
    Consultant informatique
    Inscrit en
    Décembre 2007
    Messages
    300
    Détails du profil
    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 300
    Par défaut
    Bonjour,

    Merci beaucoup ok.Idriss et disedorgue, comme je viens du réseau alors je me suis lancé sur le principe utilisé avec les masque des sous réseau poyur calculer le sous réseau déstinataire, mais j'ai trouvé une autre solution plus simple, en faisant la soustraction par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    A= 1010 sont inverse est 0101: F-A= 1111-1010=0101, après j'ajoute le 0001 ce qui donne: 0111.et avec ce résultat je fais d'autres calcules....
    Merci encore une fois.

    Sve@r:

    1 ET 0 = 0 (Vrai ET Faux = FAUX).

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 872
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 872
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par rufa11 Voir le message
    A= 1010 sont inverse est 0101: F-A= 1111-1010=0101, après j'ajoute le 0001 ce qui donne: 0111.
    Non, 0101 + 1 = 0110...

    Citation Envoyé par rufa11 Voir le message
    Sve@r:

    1 ET 0 = 0 (Vrai ET Faux = FAUX).
    Wahou, tu en sais des choses. Et donc comment (avec ce même "et") tu transformes le 0 en 1 ???
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 728
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 728
    Par défaut
    moins de sarcasmes, plus de références, s'il vous plaît !

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

Discussions similaires

  1. Similarité entre deux chaines binaires
    Par arkandias dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 31/12/2007, 00h05
  2. espace entre deux chaines de caractères
    Par Pitou5464 dans le forum Access
    Réponses: 2
    Dernier message: 09/08/2006, 13h16
  3. Faire passer des items entre deux zones de listes
    Par ludobado dans le forum Access
    Réponses: 8
    Dernier message: 04/05/2006, 19h33
  4. Réponses: 7
    Dernier message: 03/02/2006, 14h50
  5. Réponses: 3
    Dernier message: 22/09/2005, 11h34

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